# Abfrage/Prüfung eines Wertebereichs



## Lili-Chan (18. Juni 2010)

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:

```
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;
	}
```


----------



## zerix (18. Juni 2010)

Hallo,

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


```
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


----------



## Lili-Chan (18. Juni 2010)

Danke, du bist meine Rettung. Was meinst du mit 
	
	
	



```

```
 wegen meinem<html> in den Ausgaben? ich wusst nicht wie dasanders zu bewerkstelligen ist


----------



## Matt297 (18. Juni 2010)

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:


```
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.


----------



## Lili-Chan (18. Juni 2010)

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.


----------



## zerix (18. Juni 2010)

Matt297 hat gesagt.:


> 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:
> 
> 
> ...



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


----------



## Matt297 (18. Juni 2010)

Das Stimmt, da hab ich nicht näher drauf geachtet, klar bei JLabels geht das nicht anders...


----------

