if abfragen

H

hobbit12

Gast
Guten Tag,
ich habe mehrere if abfragen und wenn eine davon zutrifft, soll das programm beendet werden.
Kann man das mit einer while-Schleife machen und mithilfe von break? oder bin ich da auf dem falschen weg? weil momentan werden alle abfragen bearbeitet, das soll aber nicht sein, weil dann eine fehlermeldung kommt.
 
H

hobbit12

Gast
Java:
	public void kontrolle(String a) {
		char ar = a.charAt(0);
		if (a == "0") {
			throw new IllegalArgumentException("a darf nicht 0 sein");	
		}
		
		if (a == " ") {
			throw new IllegalArgumentException("a darf keine Leerzeichen entahlten");
		}
		if (!Character.isDigit(ar)) {
			throw new IllegalArgumentException("a darf kein Buchstabe oder Sonderzeichen sein");
		}
		
		if (Integer.valueOf(a) < 0) {
			throw new IllegalArgumentException("a darf kein negativer Integer-Wert sein");
			
		}
}
 
T

TryToHelp

Gast
Das klingt nach der gleichen Frage wie in den Thread
http://www.java-forum.org/java-basics-anfaenger-themen/144477-note-bestimmen.html
zum einen gibt es
Code:
if..else if
zum anderen
Code:
return
oder wirkliches beenden mit
Code:
System.exit(0)
eine while-schleife ist da der falsche Weg, das würde ja nur was bringen, wenn du ein und die selbe abfrage heufiger haben willst.
 
H

hobbit12

Gast
Zum Beispiel wenn ich -34 eingebe kommt als Exception "bitte keine sonderzeichen...."
 

njans

Top Contributor
Das kann man mit keiner Schleife machen, es sei denn du baust eine Map mit Strings und verwendest als Key die Bedingungen.
 
H

hobbit12

Gast
Hat mit parseInt() auch nicht geklappt, er spuckt mit immer die Exception für Sonderzeichen und Buchstaben aus, wahrscheinlich ist bei den Bedingungen irgendwo der Feherl...
 
T

TryToHelp

Gast
Zum Beispiel wenn ich -34 eingebe kommt als Exception "bitte keine sonderzeichen...."
Das kommt aber, da er schon vorher raus geht, du testest erst, ob es 0 ist, dann ob es ein leerzeichen ist, dann ob dort nur zahlen stehen, was ein "-" nicht ist (beendet da deine funktion mit der exception) und erst dann würde er, so er nicht schon beenden würde, schaust du ob es kleiner 0 ist ;-)
 

Volvagia

Top Contributor
Das schaut schon etwas strange aus.
Zuerst testest du, ob der String (den du offenstlich doch lieber als Zahl haben würdest) gleich 0 ist (und das falsch), dann testest du ob er ein Leerzeichen enhält, dann prüfst du ob der erste Char keine Zahl ist und dann ob die erste Ziffer des Strings kleiner als 0 ist. Wie soll die erste Ziffer des Strings kleiner als 0 sein?
 
T

TryToHelp

Gast
Ja, da ein Computerprogramm Zeile für Zeile, außer bei if..else, da können Zeilen ausgelassen werden, abgearbeitet wird, ist die reihenfole wichtig.
kurzes beispiel zur Verdeutlichung
Java:
int a=0;
System.out.println("a="+a);
a++;
und
Java:
int a=0;
a++;
System.out.println("a="+a);
Also ist die Reihenfolge wichtig.
Deine Abfrage mit
Code:
a=="0"
wird wahrscheinlich auch nicht richtig gehen, da man strings mit
Code:
equals
vergleicht, ebenso für die abfrage mit dem Leerzeichen, da solltest du auch
Code:
equals
oder
Code:
contains
verwenden
 

MChrista

Mitglied
was soll denn deine kontrolle überhaupt machen?
wann soll die kontrolle true zurückliefern?

vielleicht solltest du dir überlegen, welche zeichen zugelassen werden sollen und nicht, was abgefangen werden soll.
 
H

hobbit12

Gast
Eine einfache Eingabe überprüfung, die eingabe muss ein String sein, deswegen das ganz konvertieren.
 
T

TryToHelp

Gast
Für dein Problem, könntest du dir auch mal RegEx anschauen, das könnte dir eventuell auch helfen ;-)
 

Volvagia

Top Contributor
Ich finde für eine Zahl klingt das (abgesehen von -) garnicht komisch.
Du kannst natürlich RegEx verwenden, aber ich denke das ist besonders für einen Anfänger recht schwer zu verstehen.
Warum bleibst du nicht bei Flashbaers Idee? Die sollte klappen. Da fliegt dir automatisch eine Exception falls der String illegale Zeichen beinhaltet und dann kannst du ganz einfach testen. Ohne zu prüfen ob die erste Ziffer kleiner als 0 ist. :autsch:
 
H

hobbit12

Gast
Jo es funktioniert auch wunderbar für Sonderzeichen, aber wenn ich eine if-abfrage mache für negative zahlen, dann sieht er die auch als sonderzeichen.
 
T

TryToHelp

Gast
Du hast in deinem Code als abfrage drinnen, ist es keine Ziffer, Ziffern sind diese hier
Code:
0 1 2 3 4 5 6 7 8 9
nicht mehr und nicht weniger,
Code:
-
sowie
Code:
,
oder
Code:
.
sind deiner definition nach alles Sonderzeichen
 

Volvagia

Top Contributor
Hm?

Java:
public void kontrolle(String a) {
	int i = 0;
	try {
		i = Integer.parseInt(a);	
	} catch(NumberFormatException e) {
		throw new IllegalArgumentException("Das war wohl keine Zahl");
	}
	
	if (i == 0) {
		throw new IllegalArgumentException("a darf nicht 0 sein");  
	}
	if (i < 0) {
		throw new IllegalArgumentException("a darf nicht negativ sein");
	}
}
@Test
public void konstrolleTest() {
	System.out.println(kontrolleBoolean("0")); //False
	System.out.println(kontrolleBoolean("-3")); //False
	System.out.println(kontrolleBoolean("3*4")); //False
	System.out.println(kontrolleBoolean("4")); //True
	System.out.println(kontrolleBoolean("19")); //True
	System.out.println(kontrolleBoolean("ABCD")); //False
}
public boolean kontrolleBoolean(String a) {
	try {
		kontrolle(a);	
	} catch(IllegalArgumentException e) {
		return(false);
	}
	return(true);
}
 
P

pappawinni

Gast
Also wenn es egal wäre, was denn eigentlich falsch ist, Hauptsache es wird erkannt, dass die eingegebenen Zeichen keine positive Integer darstellen, dann sollte wohl sowas

Java:
     public static void main(String[] args) {
        
    	String a = args.length == 0 ? " " : args[0];
    	for (int i=0;i<a.length();i++){    		
            char ar = a.charAt(0);
            if (!Character.isDigit(ar)) {
                throw new IllegalArgumentException("\""+ar+"\" ist ungültiges zeichen");
            }   		
            if ("0123456789".indexOf(ar)<0) {
                throw new IllegalArgumentException("\""+ar+"\" ist ungültiges zeichen");
            }   		

    	}
    	System.out.println(Integer.parseInt(a));

    }
genügen, wobei nur eine der beiden if's notwendig wäre.

Es kommt aber scheinbar aber darauf an, den Fehler näher zu spezifizieren, oder was ist eigentlich genau das Ziel.
 
H

hobbit12

Gast
Danke! Soweit war ich aber auch schon, das Problem ist einfach immer noch, auch bei eurem Code, das negative Zahlen für in Sonderzeichen sind. :(
 
T

TryToHelp

Gast
Ja, da ein Computerprogramm Zeile für Zeile, außer bei if..else, da können Zeilen ausgelassen werden, abgearbeitet wird, ist die reihenfole wichtig.
kurzes beispiel zur Verdeutlichung
Java:
int a=0;
System.out.println("a="+a);
a++;
und
Java:
int a=0;
a++;
System.out.println("a="+a);
Also ist die Reihenfolge wichtig.
Deine Abfrage mit
Code:
a=="0"
wird wahrscheinlich auch nicht richtig gehen, da man strings mit
Code:
equals
vergleicht, ebenso für die abfrage mit dem Leerzeichen, da solltest du auch
Code:
equals
oder
Code:
contains
verwenden
Hast du dir diese Aussage mal angeschaut, dann Tausche die Reihenfolge deiner Abfragen ;-) und beachte meine Kommentare
 
H

hobbit12

Gast
Selbst wenn man sie tauscht funktioniert es nicht, dann geht das eine aber das andere nicht
 
H

hobbit12

Gast
hier ist mein code, eines von beiden funktioniert immer, aber beides nicht

Java:
		if (a.equals("")) {
			throw new IllegalArgumentException("value darf nicht leer sein!");
		}

		if (a.equals(" ")) {
			throw new IllegalArgumentException("value darf kein leerzeichen sein!");
		}
		if (a.contains(".")) {
			throw new IllegalArgumentException("Dezimalzahl nur mit Komma zulässig");
		}

		if (Integer.valueOf(a) < 0) {
			throw new IllegalArgumentException("value darf nicht negativ sein");
		}

		if (Integer.valueOf(a) == 0) {
			throw new IllegalArgumentException("value darf nicht 0 sein!");
		}
		for (int i = 0; i < a.length(); i++) {
			if (!Character.isDigit(i)) {
				throw new NumberFormatException("a darf kein Buchstabe oder Sonderzeichen sein");
			}
		}
 
T

TryToHelp

Gast
Dein Code macht hier keinen Sinn, du überpr+fst ob die Zahl in
Code:
i
keine Zahl ist, aber du willst testen ob der Buchstabe an der Stelle kein Zahl ist ;-)
Java:
for (int i = 0; i < a.length(); i++) {
  if (!Character.isDigit(i)) {
    throw new NumberFormatException("a darf kein Buchstabe oder Sonderzeichen sein");
  }
}
Das müsste dann eher so aussehen
Java:
for (int i = 0; i < a.length(); i++) {
  if (!Character.isDigit(a.charAt(i))) {
    throw new NumberFormatException("a darf kein Buchstabe oder Sonderzeichen sein");
  }
}
 
T

TryToHelp

Gast
und du bekommst folgende Exception
Code:
IllegalArgumentException("value darf nicht negativ sein")
?
 
H

hobbit12

Gast
Mist in dem Falle ja, weils richtig herum ist aber wenn du zum Biespiel String a = "wdfhb" eingibst, wird nicht die Exception für Buchstaben und Sonderzeichen geschmissen, es ist mir klar warum es nicht funktioniert, nur nicht wo ich was ändern muss....
 
T

TryToHelp

Gast
probier mal ob es so geht, aber mit deinem Punkt bekommst du so oder so bei Integern Probleme, nur so als Tip;-)
Java:
if (a.equals("")) {
  throw new IllegalArgumentException("value darf nicht leer sein!");
}
if (a.equals(" ")) {
  throw new IllegalArgumentException("value darf kein leerzeichen sein!");
}
if (a.contains(".")) {
  throw new IllegalArgumentException("Dezimalzahl nur mit Komma zulässig");
}
double d;
try {
   d = Double.parseDouble(a);    
} catch(NumberFormatException e) {
   throw new IllegalArgumentException("a darf kein Buchstabe oder Sonderzeichen sein");
}
if (d<0.0){
  throw new IllegalArgumentException("value darf nicht negativ sein");
}
if (d==0.0){
  throw new IllegalArgumentException("value darf nicht 0 sein!");
}
 
H

hobbit12

Gast
Vielen Dank! Klappt! Könntest du mir noch kurz erklären warum es mit try/catch funktioniert?
 
T

TryToHelp

Gast
als erstes testest du deine if's, also leer, leerzeichen,... dannach versuchst du aus der Eingabe ein Double zu parsen, wenn das Fehlschlägt, wirft es eine NumberFormatException, diese fängst du mit dem Try/Catch und wirfst dann deine eigene Fehlermeldung, wenn es keine Fehlermeldung wirft, waren es nur Zahlen, dann kann man weitertesten, ob die Zahl negativ oder 0 ist. Das war schließlich schon das was Volvagia vor 14 posts geschrieben hatte ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
ven000m Bitcoin Blockhöhe abfragen Java Basics - Anfänger-Themen 12
S If abfragen (+, - , /, *) Java Basics - Anfänger-Themen 13
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
Phash Websocket abfragen Java Basics - Anfänger-Themen 1
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
M Checkbox abfragen und Radiobutton Group zurücksetzen Java Basics - Anfänger-Themen 1
L Datenpaare abfragen Java Basics - Anfänger-Themen 11
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
B Serial port abfragen Java Basics - Anfänger-Themen 18
F Ordner auf alle Unterdatein abfragen Java Basics - Anfänger-Themen 3
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
T Erste Schritte Textfeld abfragen ob etwas enthalten ist. Java Basics - Anfänger-Themen 17
S Asynchrone Socket-Abfragen Java Basics - Anfänger-Themen 5
S mehrfache if-Abfragen - beste Lösung Java Basics - Anfänger-Themen 1
E Abfragen des SimpleDateFormats Java Basics - Anfänger-Themen 1
L int array abfragen Java Basics - Anfänger-Themen 16
T Variablen Var aus While-Schleife abfragen -.-' Java Basics - Anfänger-Themen 9
Y Mehrdimensionales Array diagonal abfragen. Java Basics - Anfänger-Themen 5
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
T if abfragen verkürzen Java Basics - Anfänger-Themen 5
M Wo Hilfsvariablen abfragen? Java Basics - Anfänger-Themen 1
M Farben/Color Abfragen von Farben innerhalb einer Methode Java Basics - Anfänger-Themen 9
M "Exceptions abfragen" Java Basics - Anfänger-Themen 6
M Frage nach BestPractice in if-Abfragen Java Basics - Anfänger-Themen 1
P Anlegen und Abfragen von Array List Java Basics - Anfänger-Themen 4
R IF Abfragen Java Basics - Anfänger-Themen 8
R If Abfragen Problem! Java Basics - Anfänger-Themen 4
I Button abfragen ob er geklickt wurde Java Basics - Anfänger-Themen 4
C If Abfragen Problem Java Basics - Anfänger-Themen 46
I Drei booleans abfragen Java Basics - Anfänger-Themen 2
R Input/Output Java String abfragen Java Basics - Anfänger-Themen 3
A Vokabel abfragen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
N Best Practice Stilistische Anwendung von if/else-Abfragen Java Basics - Anfänger-Themen 7
E Checkboxen abfragen Java Basics - Anfänger-Themen 10
C TreeMap Abfragen Problem Java Basics - Anfänger-Themen 7
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
B mehrere Abfragen zusammenfügen Java Basics - Anfänger-Themen 3
H durch Schleife 50 Variablen abfragen Java Basics - Anfänger-Themen 8
B If abfragen! Java Basics - Anfänger-Themen 9
J checkbox status abfragen und drucken Java Basics - Anfänger-Themen 13
M AWT Applet - Button aus anderer Klasse abfragen Java Basics - Anfänger-Themen 4
F Bedingungen mit Abfragen verknüpfen Java Basics - Anfänger-Themen 7
P länge von array abfragen? Java Basics - Anfänger-Themen 2
Gossi Input/Output Datei Lesen, inhalt abfragen, speichern Java Basics - Anfänger-Themen 5
T jNumberField auf null abfragen Java Basics - Anfänger-Themen 5
Z Erste Schritte LinkedList Werte abfragen und vergleichen Java Basics - Anfänger-Themen 3
S Input/Output Welche Möglichkeiten Eingabe von User abfragen Java Basics - Anfänger-Themen 5
H Checkboxstatus abfragen Java Basics - Anfänger-Themen 10
S unzulässigen Wert abfragen - aber wo Java Basics - Anfänger-Themen 3
eLogic Aktive Internetverbindung abfragen Java Basics - Anfänger-Themen 21
B Abfragen eines Preises.. Java Basics - Anfänger-Themen 20
D Touchpad abfragen?! Java Basics - Anfänger-Themen 9
D Abfragen ob Excel-Dateien Makros enthalten? Java Basics - Anfänger-Themen 4
B Abfragen eines Excel-Feldes auf null Java Basics - Anfänger-Themen 17
B GridLayout - elemente mit Maus abfragen Java Basics - Anfänger-Themen 3
B Daten in Instanz einer Klasse ändern / abfragen Java Basics - Anfänger-Themen 12
M Datentypen String mit Trennzeichen abfragen Java Basics - Anfänger-Themen 7
D GUI Checkboxen in allen Klassen abfragen? Java Basics - Anfänger-Themen 5
B OOP String auf bestimmte Zeichen abfragen Java Basics - Anfänger-Themen 4
M Double.NaN abfragen Java Basics - Anfänger-Themen 6
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
H Objecttyp abfragen... Java Basics - Anfänger-Themen 11
N Zeilenanzahl einer TXT abfragen..? Java Basics - Anfänger-Themen 11
S Bremsen 3 IF-Abfragen ein Programm? Java Basics - Anfänger-Themen 7
T scanner bestimmtes format abfragen Java Basics - Anfänger-Themen 5
T JOptionPane mit .showInputDialog: Ergebnis abfragen? Java Basics - Anfänger-Themen 2
S Absatz aus Textdokument abfragen Java Basics - Anfänger-Themen 6
B gedrückte Tasten abfragen Java Basics - Anfänger-Themen 11
L "unschöne" if-Abfragen Java Basics - Anfänger-Themen 4
JFeel-x JComponent<-----Eigenschaften<-- Als Liste abfragen? Java Basics - Anfänger-Themen 8
P Pixelfarbe abfragen Java Basics - Anfänger-Themen 8
J einfache Tastendrücke in einem JFrame abfragen Java Basics - Anfänger-Themen 2
S if-Abfragen bringen mich zum VERZWEIFELN! Java Basics - Anfänger-Themen 12
B Aus JTable ImageIcon abfragen Java Basics - Anfänger-Themen 8
hdi Desktop-Auflösung abfragen -> setLocation() von Frame Java Basics - Anfänger-Themen 5
D jeditorpane checkbox abfragen? Java Basics - Anfänger-Themen 7
A Googel Lokal abfragen Java Basics - Anfänger-Themen 7
G in einem inputstream auf " " abfragen? Java Basics - Anfänger-Themen 3
T Rechner-Name abfragen Java Basics - Anfänger-Themen 6
N Event auf JTabbedPane abfragen ? Java Basics - Anfänger-Themen 8
M Maus position abfragen und setzen? Java Basics - Anfänger-Themen 1
L JTabel abfragen ob es eine erste Zeile gibt? Java Basics - Anfänger-Themen 2
G If Abfragen Java Basics - Anfänger-Themen 3
T Variablen Classübergreifen abfragen Java Basics - Anfänger-Themen 6
S Abfragen ob Label enabled ist . Java Basics - Anfänger-Themen 2
M Status von ext. Programm abfragen Java Basics - Anfänger-Themen 2
G [Applet] Mauskkoodinaten abfragen Java Basics - Anfänger-Themen 3
C String.split("") einzelne Positionen abfragen Java Basics - Anfänger-Themen 10
R Vector mit contains abfragen Java Basics - Anfänger-Themen 32
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
V thread, variable abfragen Java Basics - Anfänger-Themen 14
F Abfragen aber wie ? Java Basics - Anfänger-Themen 7
G JDialog-Status im Frame abfragen Java Basics - Anfänger-Themen 2
V .jar macht keine Datenbank abfragen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben