power-poler
Goto Top

Prüfen auf -1 funktioniert nicht

Hallo
Versuche mich ja gerade an Java, und arbeite mich da gerade durch ein Tutorial.
Nun habe ich aber wider ein Problem.

Und zwar versuche ich eine Eingabe auf Korrektheit zu Prüfen.
Folgende Zeichen sind erlaubt:
1
2
3
-1
Habe es so weit, das mein Prüfer die Eingabe zwischen 1-3 und String unterscheiden kann.
Also wenn die Angabe z.B. "Hallo" ist, ist sie Falsch.
Bei 1-3 Richtig.
Wenn ich aber -1 eingebe kommt auch Falsch(Soll aber Richtig sein)
Irgendwas mache ich falsch, weiß aber noch nicht wo.

hier meine class:

class Pruefer
{
	private String eingabe;
	
	public void Eingabe()
	{
		//int eingabe;
	}
	public boolean pruefen(String eingabe)
	{
		if(eingabe.matches("[0-9]+"))  
			{
			int eingabe1 = Integer.parseInt(eingabe);
			
			if (eingabe1 == 1)
			{
				return true;
			}
			else 
				if (eingabe1 == 2)
				{
				return true;
				}
				else 
					if (eingabe1 == 3)
					{
					return true;
					}
					else 
						if (eingabe1 == (2-3))
							{
								return true;
							}
						else
							return false;
			}
		else
			return false;
	}
}
Stehe beim class schreiben noch relativ am Anfang. Wenn jemand Tipps hat, wie ich das aufgeräumter /kürzer schreiben kann, immer her damit.
Das mit dem 2-3 war nur ein versuch, eigentlich soll dort -1 stehen.
Vermute den Fehler ja in dieser Zeile:
if(eingabe.matches("[0-9]+"))  
Aber auch wenn ich dort das + entferne geht es nicht.

Schonmal Danke für eine Antwort.
Mfg
Power-Poler

Content-Key: 189129

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

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: bastla
bastla 05.08.2012 um 14:20:46 Uhr
Goto Top
Hallo Power-Poler!

Versuch es einmal mit
if(eingabe.matches("[+-]*[0-9]+"))
Grüße
bastla
Mitglied: dog
dog 05.08.2012 um 14:24:49 Uhr
Goto Top
...da war der bastla mal wieder schneller, auch wenn ich nicht unbedingt "----9" erlauben würde face-wink

Viel einfacher wäre es aber sich die String-Prüfung ganz zu sparen und einfach die Exception von Integer.parseInt zu fangen (die in dem Programm auch immer noch auftreten kann. Versuch mal 8589934591 einzugeben...)
Mitglied: bastla
bastla 05.08.2012 aktualisiert um 14:32:01 Uhr
Goto Top
@dog
auch wenn ich nicht unbedingt "----9" erlauben würde face-wink
Hast recht face-smile
if(eingabe.matches("^[+-]{0,1}[0-9]+$"))
Grüße
bastla
Mitglied: Power-Poler
Power-Poler 05.08.2012 aktualisiert um 14:41:49 Uhr
Goto Top
Danke für eure Antworten.
@dog:
8589934591
Exception in thread "main" java.lang.NumberFormatException: For input string: "
8589934591"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Pruefer.pruefen(VorratskammerTester.java:14)
at VorratskammerTester.main(VorratskammerTester.java:158)
Aber warum?
Naja, ist für die Aufgabe bestimmt unerheblich; aber wenn ich noch eine Längenprüfung hinein baue, müsste es doch gehen, oder gibt es dan noch weitere Stolperfallen?
if(eingabe.length() < 3)
Ja, hat funktioniert face-smile
@bastla
Danke, das funktioniert jetzt.
Hab gerade noch eine Aktualisierung bemerkt, auf was wird dort jetzt genau überprüft?
Mitglied: bastla
bastla 05.08.2012 aktualisiert um 14:43:51 Uhr
Goto Top
Hallo Power-Poler!

Es sollte jetzt nur noch möglich sein, am Beginn (^) kein oder ein Plus oder Minus und danach bis zum Ende ($) nur noch mindestens eine Ziffer einzugeben (wenn Du die Anzahl der Ziffern festlegen willst, kannst Du als Pattern zB
^[+-]{0,1}[0-9]{1,4}$
für maximal 4-stellige Zahlen verwenden) ...

Grüße
bastla
Mitglied: Power-Poler
Power-Poler 05.08.2012 aktualisiert um 14:50:02 Uhr
Goto Top
Ah, ich glaube langsam verstehe ich es.
Auch wenn mich dein 1-4 etwas irritiert hat.
Weil oben 0,1 in der {} Steht.
Aber so kann ich mir die lägen Prüfung sparen.
Danke euch beiden, jetzt kann ich endlich weitermachen face-smile

Das ist furchtbar mit der Bearbeiten Funktion, ständig ändert sich alles face-smile
Mitglied: dog
dog 05.08.2012 um 14:57:25 Uhr
Goto Top
^$ ist in dem Fall überflüssig, weil die String.matches() Funktion die immer automatisch hinzufügt.

Testen kann man das hier: http://www.regexplanet.com/advanced/java/index.html

Und {0,1} würde ich noch als ? abkürzen face-smile
Mitglied: bastla
bastla 05.08.2012 um 14:58:27 Uhr
Goto Top
Hallo Power-Poler!
Das ist furchtbar mit der Bearbeiten Funktion, ständig ändert sich alles face-smile
Nennt sich "work in progress" face-wink - jetzt bleibt's aber so, wie's da oben steht ...

Grüße
bastla
Mitglied: bastla
bastla 05.08.2012 um 15:00:32 Uhr
Goto Top
Hallo dog!

Danke für die Ergänzungen - dann schreib ich nochmals die vorläufig endgültige face-wink Version hin:
if(eingabe.matches("^[+-]?[0-9]+"))
Grüße
bastla
Mitglied: Power-Poler
Power-Poler 05.08.2012 aktualisiert um 15:35:47 Uhr
Goto Top
So nächstes Problem (Ich schreib es mal hier mit rein, wenn ihr meint, das ein neues Thema besser ist, kurz sagen, dan lösche ich es hier und mach ein neues).

Hier ist jetzt meine Eingabeaufforderung:
Eingabe = "OK";  
	while ((Eingabe.equals("-1")) )  
	{
		System.out.println("Treffen Sie ihre Auswahl (1, 2 oder 3). Exit -1:");  
		Eingabe = scan.nextLine();

		
			
		if (test.pruefen(Eingabe))
			System.out.println("Richtig");  
		else
			System.out.println("Falsch");  
	}
Funktioniert auch soweit, nur das ich ungleich an stelle es equels bräuchte.
Hatte es mit != versucht, aber das will Java bei Strings leider nicht.

Hab ne lösung gefunden:
boolean weiter = true;
while (weiter)
if (Eingabe.equals("-1"))  
   weiter= false;
Mitglied: 76109
76109 05.08.2012 aktualisiert um 17:13:14 Uhr
Goto Top
Hallo Power-Poler!

Eventuell funktionierts auch mit:
While (!Eingabe.equals("-1"))  

Gruß Dieter