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

Printed on: April 23, 2024 at 17:04 o'clock

Member: bastla
bastla Aug 05, 2012 at 12:20:46 (UTC)
Goto Top
Hallo Power-Poler!

Versuch es einmal mit
if(eingabe.matches("[+-]*[0-9]+"))
Grüße
bastla
Member: dog
dog Aug 05, 2012 at 12:24:49 (UTC)
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...)
Member: bastla
bastla Aug 05, 2012 updated at 12:32:01 (UTC)
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
Member: Power-Poler
Power-Poler Aug 05, 2012 updated at 12:41:49 (UTC)
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?
Member: bastla
bastla Aug 05, 2012 updated at 12:43:51 (UTC)
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
Member: Power-Poler
Power-Poler Aug 05, 2012 updated at 12:50:02 (UTC)
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
Member: dog
dog Aug 05, 2012 at 12:57:25 (UTC)
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
Member: bastla
bastla Aug 05, 2012 at 12:58:27 (UTC)
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
Member: bastla
bastla Aug 05, 2012 at 13:00:32 (UTC)
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
Member: Power-Poler
Power-Poler Aug 05, 2012 updated at 13:35:47 (UTC)
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 Aug 05, 2012 updated at 15:13:14 (UTC)
Goto Top
Hallo Power-Poler!

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

Gruß Dieter