Methoden Probleme mit "typeof"

M

Michelin Mann

Gast
Hi!

Als mögliche Eingabe für den String str wird z.B. "12, -5, 4, -23463" erwartet. Meine Methode soll nun die größte Zahl zurückgeben.
Beim Compilieren taucht allerdings folgendes Problem auf:

Java:
MaxNumberWrapper.java:9: cannot find symbol
symbol  : method typeof(java.lang.String)
location: class net.mumie.problem.ws_12.ws_12_03_strings_operatoren.MaxNumberWrapper
while(typeof(splitResult[i]) != "undefined") {
      ^
1 error

Die Funktion "typeof" war mir bis heute unbekannt. Allerdings habe ich auf mehreren Seiten gelesen, dass diese eigentlich genau das machen soll, was ich mir vorstelle, nämlich zu überprüfen, ob die entsprechende Variable bereits definiert wurde:

Java:
public int findMaxNumber(String str){
			
String[] splitResult = str.split( "," );

int m = Integer.MIN_VALUE;
int b;
int i = 1;

while(typeof(splitResult[i]) != "undefined") {
	b = Integer.parseInt(splitResult[i]);
	m = Math.max(b,m);
	i++;
	}

return m;

}

Was ist falsch an meiner Methode? Was bedeutet die Fehlermeldung genau?


Gruß, Michelin Mann
 
M

Michelin Mann

Gast
Stimmt! Ich wusste nicht, dass man zwischen Java und Javascript unterscheidet. Aber gibt es in Java denn kein pendant zu typeof? Im Prinzip will ich ja nur überprüfen, ob eine bestimmte Variable bereits definiert ist oder nicht. Geht das in Java nicht?

Danke für eure bisherigen Antworten!

Michelin Mann
 

Volvagia

Top Contributor
Definiert ist sie immer
Sonst hättest du sie ja nicht. ^^
Falls du wissen willst ob sie bereits auf ein Objekt zeigt

Java:
if(splitResult[i] != null)
Das wirst du bei Split aber wahrscheinlich nicht brauchen. (Na ja, sicher ist sicher ^^)


(PS: Strings nicht mit == sondern equals mit anderen Strings vergleichen)
 

Schandro

Top Contributor
Ich wusste nicht, dass man zwischen Java und Javascript unterscheidet
Java und JavaScript sind zwei vollkommen unterschiedliche Programmiersprachen. Sie haben absolut nichts miteinander zu tun und werden an völlig unterschiedlichen Orten zu völlig unterschiedlichen Zwecken eingesetzt.

Im Prinzip will ich ja nur überprüfen, ob eine bestimmte Variable bereits definiert ist oder nicht. Geht das in Java nicht?
Eine Variable ist in Java immer deklariert und hat einen Wert (per default null, 0 oder false, je nach Datentyp), ansonsten könntest du den Code garnicht kompilieren. Du müsstest also
Code:
splitResult[i] != null
schreiben. Allerdings macht das bei deinem Code nicht wirklich Sinn. Vermutlich willst du eher prüfen oder der String nicht leer ist:
Code:
!"".equals(splitResult[i])
 
Zuletzt bearbeitet:
M

Michelin Mann

Gast
Hi Volvagia!

Erstmal vielen Dank für Deine Hilfe!

Definiert ist sie immer
Sonst hättest du sie ja nicht. ^^
Sie ist immer definiert? Also angenommen, str = "x, y".
Ich hatte eigentlich angenommen, dass
splitResult[1] = x und
splitResult[2] = y
gilt und splitResult für i >2 nicht definiert seien...

Falls du wissen willst ob sie bereits auf ein Objekt zeigt

Java Code:
1
if(splitResult != null)
Das wirst du bei Split aber wahrscheinlich nicht brauchen. (Na ja, sicher ist sicher ^^)

"splitResult != null" heißt also soviel wie "splitresult beinhaltet keine Adresse zu irgendeinem Objekt"? Ich frage deshalb, weil man ja leicht annehmen könnte, dass "splitResult != null" "nicht auf den Wert null verweist". Sprich eine "nicht-Standard-Variable" hat genau dann den Wert Null, wenn sie "keine Adresse/Verknüpfung" enthält?

Gruß
 

Schandro

Top Contributor
Sie ist immer definiert? Also angenommen, str = "x, y".
Ich hatte eigentlich angenommen, dass
splitResult[1] = x und
splitResult[2] = y
gilt und splitResult für i >2 nicht definiert seien...

Arrays in Java (und auch in so gut wie allen anderen Sprachen) fangen bei 0 an, nicht bei 1.

"splitResult != null" heißt also soviel wie "splitresult beinhaltet keine Adresse zu irgendeinem Objekt"? Ich frage deshalb, weil man ja leicht annehmen könnte, dass "splitResult != null" "nicht auf den Wert null verweist". Sprich eine "nicht-Standard-Variable" hat genau dann den Wert Null, wenn sie "keine Adresse/Verknüpfung" enthält?


mit "nicht-Standard-Variable" meinst du wohl "nicht primitive Variable", d.h. eine Referenz auf ein Object.

Ja. Eine Referenz zeigt immer entweder auf ein Object oder auf
Code:
null
 
M

Michelin Mann

Gast
Auch vielen Dank für Deine Hilfe, Schandro!
Ich habe die Methode nun wie folgt geändert:
Java:
String[] splitResult = str.split( ", " );

int m = Integer.MIN_VALUE;
int b;
int i = 0;

while(splitResult[i] != null) {
	b = Integer.parseInt(splitResult[i]);
	m = Math.max(b,m);
	i++;
	}

return m;
Ich habe also auch i den Startwert i=0 zugewiesen, entsprechend Deiner Aussage:
Arrays in Java (und auch in so gut wie allen anderen Sprachen) fangen bei 0 an, nicht bei 1.
Dann müsste die while-Schleife ja eigentlich (nehmen wir wieder "str = x, y") bei i=2 aufhören, weil "splitResult[2] = null" und die Methode sollte das Maximum von splitResult[0] und splitResult[1] liefern. Beim kompilieren habe ich nun auch keine Probleme mehr.


Nun bekomme ich aber folgende Fehlermeldung vom "Test-Programm" (also nicht vom Compiler):
java.lang.ArrayIndexOutOfBoundsException: 3
at net.mumie.problem.ws_12.ws_12_03_strings_operatoren.MaxNumberWrapper.findMaxNumber(MaxNumberWrapper.java:15)
at net.mumie.problem.ws_12.ws_12_03_strings_operatoren.MaxNumberEvaluator.main(MaxNumberEvaluator.java:52)
at EvaluatorExecutor.main(EvaluatorExecutor.java:8)

Kann sich jemand vorstellen, was mit "java.lang.ArrayIndexOutOfBoundsException: 3" gemeint ist?
 

Schandro

Top Contributor
Kann sich jemand vorstellen, was mit "java.lang.ArrayIndexOutOfBoundsException: 3" gemeint ist?
Steht doch da. Der Index 3 ist "out of bounds" bei dem Array. Bedeutet übersetzt das das Array weniger als 4 Einträge hat, du aber versuchts auf den 4. Eintrag zuzugreifen. Das darf man in Java nicht machen, anonsten fliegt genau diese Exception. Stattdessen musst du vorher die Länge des Arrays überprüfen.

Der Kopf der while-Schleife sollte so aussehen:
Java:
while(i<splitResult.length) {

Den Vergleich mit
Code:
null
kannst du weglassen,
Code:
.split
liefert niemals ein Array zurück das
Code:
null
enthält. Stattdessen solltest du dir mal Gedanken machen was passiert wenn Integer.parseInt fehlschlägt. Wäre wahrscheinlich am besten ein try-catch drumzubauen um die NumberFormatException abzufangen.
 
Zuletzt bearbeitet:
M

Michelin Mann

Gast
Stattdessen musst du vorher die Länge des Arrays überprüfen.
Das hätte ich natürlich auch direkt fragen können! Das Problem, nicht zu wissen wie man die Länge des Arrays überprüft (arbeite heute zum ersten Mal überhaupt mit Arrays), hat mich überhaupt erst zu obiger Variante "gezwungen".

Die neue Fehlermeldung könnte mit dem Teil der Aufgabenstellung zusammenhängen, der fordert, dass falls der String str leer ist, das minimale Integer ausgegeben werden soll. Ich dachte allerdings, dass ich diesen Fall schon abgedeckt habe. Denn dann wäre ja splitResult.length=0 und die while-Schleife würde gar nicht erst anfangen zu laufen. Dann müsste doch eigentlich m = Integer.MIN_VALUE ausgegeben werden!?
Hier die komplette Fehlermeldung (vielleicht habe ich diese ja auch falsch interpretiert):
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at net.mumie.problem.ws_12.ws_12_03_strings_operatoren.MaxNumberWrapper.findMaxNumber(MaxNumberWrapper.java:16)
at net.mumie.problem.ws_12.ws_12_03_strings_operatoren.MaxNumberEvaluator.main(MaxNumberEvaluator.java:52)
at EvaluatorExecutor.main(EvaluatorExecutor.java:8)
 
M

Michelin Mann

Gast
bzw. vielleicht ist splitResult.length=1 mit splitResult[0]="", falls das möglich ist. Aber was passiert dann bei Integer.parseInt(splitResult[0])? Ist Integer.parseInt(splitResult[0])=0?
 

Volvagia

Top Contributor
"" kann nicht als Zahl geparst werden, daher die Exception.
Du musst vorher prüfen ob es sich um eine Zahl handelt. Das kann z. B. durch eine Schleife oder RegEx gelöst werden. Nicht schön aber dafür wahrscheinlich am einfachsten wäre es die NumberFormatException in einen leeren catch abfangen.

Vorsicht, leere catch nur in Ausnahmefällen verwenden. Das verschluckt dir sonst die Fehler und du siehst nichtmal mehr, falls was schief läuft.



[EDIT]Hier noch eine RegEx-Lösung:
Java:
Pattern.compile("[0-9]+").matcher("5").matches()
[/EDIT]
 
Zuletzt bearbeitet:

Schandro

Top Contributor
bzw. vielleicht ist splitResult.length=1 mit splitResult[0]="", falls das möglich ist.

jap

Aber was passiert dann bei Integer.parseInt(splitResult[0])? Ist Integer.parseInt(splitResult[0])=0?

Nein. Dann wird die java.lang.NumberFormatException geschmissen. Das hatte ich in meinem Post mit dem try-catch gemeint.

Hier mal eine Komplettlösung:
Java:
		String input = "1, 5, 3";
		String[] parts = input.split(", ");

		int max = Integer.MIN_VALUE;
		for(int i=0; i<parts.length;++i) {
			int parsed;
			try {
				parsed = Integer.parseInt(parts[i]);
			}
			catch (NumberFormatException e) {
				continue; // der part konnte nicht in ein int geparsed werden. Ignoriere ihn und mach mit dem nächsten Schleifendurchlauf weiter.
			}

			max = Math.max(max, parsed);
		}

		System.out.println("Das Maximum ist "+max);
 
M

Michelin Mann

Gast
Stattdessen solltest du dir mal Gedanken machen was passiert wenn Integer.parseInt fehlschlägt.
Ok, das hatte ich vorhin "überlesen". Vielleicht unterbewusst auch absichtlich, weil ich nicht wusste was damit gemeint war. Jetzt wird mir das klar.

Java:
try {
                parsed = Integer.parseInt(parts[i]);
            }
try führt also insbesondere Integer.parseInt(parts) immer dann aus, wenn parts ausschliesslich einen Integer enthält. Ist das nicht der Fall, entsteht der Fehler "NumberFormatException e". try wird abgebrochen und der Fehler wird "weitertransportiert" bis er von catch abgefangen wird und du ihm im Zuge dessen sagst, er soll den Fehler ignorieren. Kann man das salopp so zusammenfassen?

Auch wenn ich folgenden Fall nach Aufgabenstellung nicht ausdrücklich betrachten soll, aber was ist wenn z.B. str = "x, y, , z"? Wenn ich try-catch richtig verstanden habe, würde er nach y abbrechen und nur das max{x,y} ausgeben, oder?
 
M

Michelin Mann

Gast
Habe mich gerade entschieden erst morgen weiterzumachen. Ich bedanke mich vielmals für eure Hilfe und wünsche euch einen angenehmen Sonntag!

Gruß, Michelin Mann
 

Schandro

Top Contributor
try führt also insbesondere Integer.parseInt(parts) immer dann aus, wenn parts ausschliesslich einen Integer enthält. Ist das nicht der Fall, entsteht der Fehler "NumberFormatException e". try wird abgebrochen und der Fehler wird "weitertransportiert" bis er von catch abgefangen wird und du ihm im Zuge dessen sagst, er soll den Fehler ignorieren. Kann man das salopp so zusammenfassen?

so ungefähr, ja

Auch wenn ich folgenden Fall nach Aufgabenstellung nicht ausdrücklich betrachten soll, aber was ist wenn z.B. str = "x, y, , z"? Wenn ich try-catch richtig verstanden habe, würde er nach y abbrechen und nur das max{x,y} ausgeben, oder?

Nein. Wenn eine NumberFormatException geschmissen wird wird der code der im catch-Teil steht ausgeführt:
Java:
continue;
continue bricht den aktuellen Schleifendurchlauf ab und macht mit dem nächsten weiter. Das heißt es wird max{x,y,z} ausgegeben.
 

Noctarius

Top Contributor
Da du scheinbar aus der Javascript Welt kommst würde ich dir empfehlen ein Buch über die Java-Grundlagen zu lesen. Vermutlich reicht dann auch ein wenig "überfliegen" schon, aber Grundlagen der Sprache braucht man halt einfach und JS ist da doch an vielen Punkten zu verschieden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Probleme mit drucken aus Java Java Basics - Anfänger-Themen 3
R Exceptions mit try-catch-Surrounding - Probleme Java Basics - Anfänger-Themen 6
D Probleme bei Verwendung short und int im Constuctor Java Basics - Anfänger-Themen 6
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
M Probleme mit Eclipse Java Basics - Anfänger-Themen 20
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
B Variablen Probleme mit Eclipse Java Basics - Anfänger-Themen 6
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
I Probleme bei Verzeichnissanalyse Java Basics - Anfänger-Themen 12
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
H Probleme mit Klassen...oder: Eine Uhr Java Basics - Anfänger-Themen 9
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
G Probleme mit Eclipse oder der URL Klasse Java Basics - Anfänger-Themen 5
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9
T Konstruktor Probleme Java Basics - Anfänger-Themen 3
W Methoden Probleme mit der Scanner Methode Java Basics - Anfänger-Themen 2
F Ja Nein Abfrage und andere Probleme Java Basics - Anfänger-Themen 5
L If Anweisung mit ArrayList Probleme Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben