gansterjo2
Goto Top

Java: For-Schleife wird übersprungen

Hallo zusammen

Ich habe wieder einmal ein Problem :-S

Ich wollte einen Rechner in Java programmieren, jedoch bleibe ich schon beim anfänglichen Problem hängen, dass aus mir schleierhaften Gründen die For-Schleife übersprungen wird.

Der Code sieht so aus:

import javax.swing.JOptionPane;
import javax.swing.JTextField;
 
public class rechnercore {
	public static void main (Stringargs){
 
		String rechnung;
 
		for(rechnung = ""; rechnung == "exit"; System.exit(0)){  
 
			JTextField eingabe = new JTextField();//Definition des Eingabefeldes
			JOptionPane pane = new JOptionPane(eingabe, JOptionPane.OK_OPTION);
 
			pane.createDialog(null, "Rechner").setVisible(true);  
 
			//System.out.println("Eingabe: " + eingabe.getText());//Ausgabe-Text 
 
			rechnung = eingabe.getText();//Umfüllen der Eingabe von der grafischen Oberfläche in eine neue Variable
 
			System.out.println("test" + rechnung);  
 
		};
 
 
	};
};

Vielen Dank für die Hilfe

Gruss Gansterjo2

Content-ID: 245958

Url: https://administrator.de/contentid/245958

Ausgedruckt am: 22.11.2024 um 16:11 Uhr

LordXearo
LordXearo 08.08.2014 aktualisiert um 13:28:52 Uhr
Goto Top
Hallo,

rechnung ist NULL und nicht "leer".

Viele Grüße

Xearo

Edit: Außerdem solltest du die Deklarationen vor die Schleife setzen.
Gansterjo2
Gansterjo2 08.08.2014 um 13:43:08 Uhr
Goto Top
Hallo,

Vielen Dank für die zügige Antwort...

Ich verstehe aber noch nicht welche Deklaration du meinst, ich bin eben noch ein Neulig, was die Programmierung angeht...

Der Code wurde nun angepasst und sieht nun so aus:
import javax.swing.JOptionPane;
import javax.swing.JTextField;
 
public class rechnercore {
	public static void main (Stringargs){
 
		String rechnung;
 
		for(rechnung = null; rechnung == "exit"; System.exit(0)){  
 
			JTextField eingabe = new JTextField();//Definition des Eingabefeldes
			JOptionPane pane = new JOptionPane(eingabe, JOptionPane.OK_OPTION);
 
			pane.createDialog(null, "Rechner").setVisible(true);  
 
			//System.out.println("Eingabe: " + eingabe.getText());//Ausgabe-Text 
 
			rechnung = eingabe.getText();//Umfüllen der Eingabe von der grafischen Oberfläche in eine neue Variable
 
			System.out.println("test" + rechnung);  
 
		};
 
 
	};
};

Gruss Gansterjo2
LordXearo
LordXearo 08.08.2014 um 13:50:29 Uhr
Goto Top
Das System.exit(0) springt mir ja gerade erst ins Auge. Diese "Schleife" ergibt nicht wirklich sein. Sobald die einmal durchlaufen ist, schließt sich dein Programm.

Du solltest dann damit beginnen, die Grundlagen zu lernen.
Gansterjo2
Gansterjo2 08.08.2014 um 14:05:38 Uhr
Goto Top
Das System.exit(0) hab ich mit Absicht gesetzt. denn so wie ich die Syntax für die For-Schleife verstanden habe sollte das (aus meiner Sicht) korrekt sein.

for(Typ Variable = Wert; Bedingung; Update)
{

};

Sprich, sobald die Bedingung eintrifft sollte das Programm beendet werden... jedoch kann ja die Bedingung nie eintreffen, da gar kein Fenster erscheint bei dem ich die Variable setzen könnte.

Oder bist du da ganz anderer Meinung?
LordXearo
Lösung LordXearo 08.08.2014, aktualisiert am 12.08.2014 um 08:05:19 Uhr
Goto Top
Achso, dass soll eine Art Endlosschleife sein. Die soll solange laufen bis du deine Eingabe getätigt hast. Für eine grafische oberfläche fehlt da auch noch einiges.

Ein Frame mit einen Layout-Manager. Da braucht man solche spielereien wie diese Schleife nicht. Das ganze sollte nachdem "MVC Prinzip" gemacht werden. Oder zu mindest einen Controller und eine View.

Anbei mal was aus alten Projekten:

Klasse controller
package Fenster;

import java.awt.*;

public class Controller implements ActionListener, WindowListener,MouseListener,KeyListener{
	view myView;
	boolean buttonlinks=true;
	
	public Controller() { //Konstruktor
		myView = new view();
		myView.Change.addActionListener(this);
		myView.Change.addMouseListener(this);
		myView.Ende.addActionListener(this);
		myView.myFenster.addWindowListener(this);
	}
	public void actionPerformed(ActionEvent e){
		if(e.getActionCommand().equals("Change")){  
			myView.myFenster.setTitle(JOptionPane.showInputDialog("Titel?"));  
			
		}
		if(e.getActionCommand().equals("Ende")){  
			System.exit(0);
		}
	}
	public void windowActivated(WindowEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void windowClosed(WindowEvent arg0) {
			
	}
	public void windowClosing(WindowEvent e) {
		System.exit(0);		
	}
	public void windowDeactivated(WindowEvent e) {
		// TODO Auto-generated method stub	
	}
	public void windowDeiconified(WindowEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void windowIconified(WindowEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void windowOpened(WindowEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public static void main(String args) {
		new Controller();
	}
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void mouseEntered(MouseEvent arg0) {
		if(buttonlinks==true){
		myView.Change.setBounds(300,100,50,50);
		buttonlinks=false;
		}
		else if(buttonlinks==false){
			myView.Change.setBounds(50,100,50,50);
			buttonlinks=true;
		}
	}
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub	
	}
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
	}
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
	}

}

Klasse view:
package Fenster;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class view {
	Frame myFenster  = new Frame();
	Button Change = new Button("Change");  
	Button Ende = new Button("Ende");  
	public view() {
		
		myFenster.setTitle ("Meine erste Applikation");  
		myFenster.setLayout(new FlowLayout());
		myFenster.setSize(400,200);
				
		myFenster.add(Change);
		myFenster.add(Ende);
		myFenster.setVisible(true);	
	}
}
Gansterjo2
Gansterjo2 08.08.2014 um 14:33:04 Uhr
Goto Top
Boa, Vielen Dank

Wenn ich mir die Quellcodes anschaue sehe ich, dass du die awt-Bibliothek importierst.

demfall werde ich den Quellcode ummodellieren, dass er awt Konform ist.

Gruss Gansterjo2
LordXearo
LordXearo 08.08.2014 um 14:36:42 Uhr
Goto Top
Ja, du kannst auch einfach swing bzw. JFrame (JButton,(..) ) nutzen. Wenn du die zwei Klassen in einem neuen Projekt anlegst, hast du jedenfalls schonmal ein lauffähiges Programm.

Gruß
Xearo
Gansterjo2
Gansterjo2 08.08.2014 um 14:47:49 Uhr
Goto Top
Ich kann natürlich auch die For-Schleife auskommentieren und dann habe ich zwar ein Interface, jedoch ist das Problem, sobald ich dann den 'ok'-Knopf drücke, wird die Applikation beendet und nicht mehr weitergeführt...

Mit awt kann man aus meiner Sicht individuellere GUIs erstellen und die Funktionen der einzelnen Buttons besser definieren. Bis eine grafische Oberfläche steht geht es einfach länger, ist aber kein Problem, ich habe alle Zeit der Welt face-wink

Gruss Gansterjo2
LordXearo
LordXearo 08.08.2014 um 14:54:47 Uhr
Goto Top
Zitat von @Gansterjo2:

Ich kann natürlich auch die For-Schleife auskommentieren und dann habe ich zwar ein Interface, jedoch ist das Problem, sobald
ich dann den 'ok'-Knopf drücke, wird die Applikation beendet und nicht mehr weitergeführt...


Das liegt daran, dass deine main-methode danach zu ende ist. In meinem Programm, erzeuge ich ein objekt vom controller und im controller ein objekt von der Klasse view. Solange die objekte nicht vernichtet werden, oder das Programm nirgendwo in ein System.Exit geht, läuft es weiter.
Gansterjo2
Gansterjo2 10.08.2014 um 12:52:23 Uhr
Goto Top
Hey LordXearo

Darf ich bei Fragen in Bezug auf AWT auf dich zukommen?

Gruss Gansterjo2