maxDigit-Methode, Compilerfehler

  • Themenstarter Themenstarter Dominik-Java
  • Beginndatum Beginndatum
D

Dominik-Java

Gast
Hallo!

Ich hab folgendes Problem. Und zwar sollen wir eine Methode schreiben, die bei einer Zahl prüft, welche Ziffer die größte ist und diese dann ausgibt.

Also zum Beispiel input n = 2321405 würde den output 5 erzeugen.

Folgendes hab ich bisher geschrieben. Leider kann ich nicht testen ob es funktioniert, weil er mir immer einen Fehler beim Aufruf des "Integer.parseInt()" ausgibt. Hab ich irgendwas bei der Syntax nicht beachtet?
Also meine Frage ist weniger, ob es funktioniert (da bastel ich selber noch. 🙂 ) sondern viel mehr, warum es einen Compiler-Fehler verursacht. 🙂

Danke und viele Grüße,
Dominik

Java:
public int findMaxDigit (int n){

  String nAlsString = String.valueOf(n);
  int maxDigit = Integer.parseInt(nAlsString.charAt(0));
  int nLength = nAlsString.length();
  int act1, act2;

  for(int i=0; i<nLength; i++){

    act1 = Integer.parseInt(nAlsString.charAt(i));
    act2 = Integer.parseInt(nAlsString.charAt(i+1));

    if(act2 > act1){
	maxDigit = act2;
    }
  }
return maxDigit;	
}
 
Integer#parseInt erwartet einen String und keinen char. Dies kannst du folgendermaßen umgehen: [c]"" + string.charAt(n)[/c]. Oder du errechnest dir die Zahl einfach: [c]string.charAt(n) - '0'[/c]
Im übrigen reicht es innerhalb der Schleife eine Ziffer direkt mit der bisher höchst gefundenen zu überprüfen.
 
ah, jetzt gehts. Hab auch gleich mal deinen Tip berücksichtigt. Ist natürlich klar, dass ich nicht jede aufs neue Vergleichen muss. 🙂

Allerdings hab ich jetzt einen Laufzeitfehler, aus dem ich nicht schlau werd.

java.lang.NumberFormatException: For input string: "-"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:474)
at java.lang.Integer.parseInt(Integer.java:497)
at Wrapper.findMaxDigit(Wrapper.java:14)
at Evaluator.main(Evaluator.java:16)
at EvaluatorExecutor.main(EvaluatorExecutor.java:7)

Könnte das an dem ""+Integer.parseInt() liegen?
 
Das bedeutet, dass du ein '-' in eine Zahl parsen willst. Und das geht ja nicht.

Zeig mal deinen neuen Code. Ich kann mir anhand deines alten Codes nicht erklären wo das '-' herkommt.
 
Java:
String nAlsString = String.valueOf(n);
int maxDigit = Integer.parseInt(nAlsString.charAt(0) + "");
int nLength = nAlsString.length();
int act1, act2;

for(int i=0; i<nLength; i++){

act1 = Integer.parseInt(nAlsString.charAt(i) + "");

if(act1 > maxDigit){
	maxDigit = act1;
}
}
return maxDigit;
 
Gibst du negative Zahlen zum Parsen an? Da wäre am Anfang ein '-' ;-)
Ansonsten gib einfach mal
Code:
nAlsString
aus, dann siehst du ob was nicht stimmt damit
 
Ja, es können auch negative Zahlen eingegeben werden. Hab einfach das ""+ mal hinten ran gepackt, gibt aber trotzdem den Fehler. :/
 
Einfach irgendwas "hinten ran packen" bringt nix (und falls doch, wäre es wohl Zufall) ;-)
'-' ist keine Ziffer, daher wirft
Code:
Integer.parseInt
die Exception. Also solltest du Zeichen, die keine Ziffern sind ignorieren oder entfernen. Bevorzugt sollte das vor dem Aufruf von
Code:
Integer.parseInt
passieren.
 
So, bin gerade echt überfordert. Bekomme einen Laufzeitfehler nach dem anderen.
Die Methode sieht bisher so aus:

Java:
String nAlsString = String.valueOf(n);
int maxDigit = 0;                                                // maxDigit wird die größte Ziffer der Zahl
int nLength = nAlsString.length();
char minus = '-';
int act1;

if(nAlsString.charAt(0) == minus){                        // Falls charAt(0) ein -, fange bei charAt(1) an

for(int i=1; i<nLength; i++){
  act1 = Integer.parseInt(nAlsString.charAt(i) + ""); // act1 ist die aktuelle ziffer an Stelle i
  if(act1 > maxDigit){                                         // wenn die aktuelle Ziffer größer als die bisherige, ersetze sie
	maxDigit = act1;
  }
}
} else{                                                             // andernfalls bei charAt(0)

  for(int i=0; i<nLength; i++){
   act1 = Integer.parseInt(nAlsString.charAt(i) + "");
   if(act1 > maxDigit){
	maxDigit = act1;
   }
  }
}
return maxDigit;


Scheint immernoch am Minus zu liegen, so sieht der Error aus:

java.lang.NumberFormatException: For input string: "-"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:474)
at java.lang.Integer.parseInt(Integer.java:497)
at Wrapper.findMaxDigit(Wrapper.java:29)
at Evaluator.main(Evaluator.java:16)
at EvaluatorExecutor.main(EvaluatorExecutor.java:7)

Hoffe mir kann jemand helfen, bin mit meinem Anfängerlatein am Ende. 🙁
 
Wie wärs wenn du mal ein paar Konsolenausgben in dein Programm einbaust? Also z.B. die übergebene Zahl n oder das momentane Zeichen das in der Schleife in einen Integer umgewandelt werden soll. Dann würdest du schnell feststellen wo das Minus herkommt.

Mit Math#abs kannst du im übrigen die Zahl in den positiven Wertebereich verschieben. Ist besser als eine Abfrage auf Minus und dann mehrere Schleifen zu benutzen...
 

Zurück
Oben