Abfrage/Prüfung eines Wertebereichs

  • Themenstarter Themenstarter Lili-Chan
  • Beginndatum Beginndatum
L

Lili-Chan

Hi ich versuche schon seit ner Weile ein High-Low Spiel in einer Gui in Eclipse zu schreiben, das programm läuft auch schon. Ich gebe dem Benutzer einen Wertebereich von 1 bis 999 an und er soll die Zafallszahl erraten. Nun möchte ich aber die vom Spieler angegebene Zahl auf den Wertebereich abprüfen, also schauen, dass die Zahl, die er eingibt zwischen 1 und 999 liegt. Mein Code Funktioniert zwar, aber es sieht sehr unübersichtlich aus mit den haufenweise verschachtelten if-Bedingungen. Deswegen wollt ich mal fragen, ob das nicht auch übersichtlicher geht?

Mein Code:
Java:
private JButton getBtRaten()
	{
		if (btRaten == null)
		{
			btRaten = new JButton();
			btRaten.setBounds(new java.awt.Rectangle(30,270,130,30));
			btRaten.setText("Raten");
			btRaten.addActionListener(new java.awt.event.ActionListener()
			{
				public void actionPerformed(java.awt.event.ActionEvent e)
				{
					//btRaten
					try
					{
						int mZahl=Integer.parseInt(tfZahl.getText());
						int mZufallszahl=zufallszahl1.getZufallsZahl();
						
						if (mZahl<1)
						{
							JOptionPane.showMessageDialog(null, "Bitte gib eine Zahl zwischen 1 und 999 ein!");
							tfZahl.setText("");
							tfZahl.requestFocus();
						}	
						else if(mZahl>999)
						{
							JOptionPane.showMessageDialog(null, "Bitte gib eine Zahl zwischen 1 und 999 ein!");
							tfZahl.setText("");
							tfZahl.requestFocus();
						}	
						else if (mZahl<mZufallszahl)
						{
							lbAusgabe.setText("Meine Zahl ist größer als: " + mZahl);
							tfZahl.setText("");
							tfZahl.requestFocus();
							btAufgeben.setVisible(true);
						}
						else if (mZahl>mZufallszahl)
						{
							lbAusgabe.setText("Meine Zahl ist kleiner als: " + mZahl);
							tfZahl.setText("");
							tfZahl.requestFocus();
							btAufgeben.setVisible(true);
						}
						else
						{
							lbAusgabe.setText("<html>Richtig, du hast gewonnen! <br>Noch einmal? Dann starte einfach ein neues Spiel</html>");
							btNeu.setVisible(true);
						}												
					}
					catch(Exception fehler)
					{
						JOptionPane.showMessageDialog(null, "Bitte gib eine Zahl ein!");
						tfZahl.setText("");
						tfZahl.requestFocus();
					}
					
				}
			});
		}
		return btRaten;
	}
 
Hallo,

großartig anders kannst du das nicht machen, nur etwas anders strukturieren, damit sich Code nicht wiederholt.

Java:
if(mZahl == mZufallszahl){
                         lbAusgabe.setText("<html>Richtig, du hast gewonnen! <br>Noch einmal? Dann starte einfach ein neues Spiel</html>");
                         btNeu.setVisible(true);
}
else{
                        if (mZahl<1 || mZahl>999)
                        {
                            JOptionPane.showMessageDialog(null, "Bitte gib eine Zahl zwischen 1 und 999 ein!");
                        }   
                        else if (mZahl<mZufallszahl)
                        {
                            lbAusgabe.setText("Meine Zahl ist größer als: " + mZahl);
                            btAufgeben.setVisible(true);
                        }
                        else if (mZahl>mZufallszahl)
                        {
                            lbAusgabe.setText("Meine Zahl ist kleiner als: " + mZahl);
                            btAufgeben.setVisible(true);
                        }
                        tfZahl.setText("");
                        tfZahl.requestFocus();
}

Nutze doch bitte das nächste mal die Code-Tags. [code=java] [/code]

Gruß

Sascha
 
Danke, du bist meine Rettung. Was meinst du mit
Java:
wegen meinem<html> in den Ausgaben? ich wusst nicht wie dasanders zu bewerkstelligen ist
 
Wenn du einen Zeilenumbruch in einem String haben möchtest, kannst du das auch mit Escape-Sequenzen machen. Unter Linux steht \n für einen Zeilenumbruch unter Windows müssens eigentlich \r\n sein, aber es versteht auch nur \n.
Beispiel:

Java:
System.out.println("Zeile\nNoch eine Zeile\nNummer Drei");
//Ausgabe:
//Zeile
//Noch eine Zeile
//Nummer Drei

Dadurch kannst du dir bei so einfachen Sachen html in Strings sparen.
 
bei mir klappt das aber nicht mit /n. Ich will die Ausgabe ja in einem Label und wenn ich da an Stelle von dem html das /n reinschrieb, hab ich trotzdem eine Ausgabe in einer Zeile.
 
Wenn du einen Zeilenumbruch in einem String haben möchtest, kannst du das auch mit Escape-Sequenzen machen. Unter Linux steht \n für einen Zeilenumbruch unter Windows müssens eigentlich \r\n sein, aber es versteht auch nur \n.
Beispiel:

Java:
System.out.println("Zeile\nNoch eine Zeile\nNummer Drei");
//Ausgabe:
//Zeile
//Noch eine Zeile
//Nummer Drei

Dadurch kannst du dir bei so einfachen Sachen html in Strings sparen.

Bei Konsolen-Asgaben hast du recht. Bei einem JLabel muss man es aber mit HTML machen, da man sonst kein Zeilen-Umbruch hinbekommt.

Gruß

Sascha
 
Zurück