Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Guten Tag
Ich habe eine Aufgabe vor mir, in der ich in einem array, das mit beliebigen Zahlen mithilfe vom Scanner eingelesen wird, die groeßte Zahl zu finden. Bei einem leeren Feld soll "die Eingabe ist leer" ausgegeben werden.
Java:
import java.util.Scanner;
public class groessteZahlArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int index;
int anzahl;
int[] feld;
int maximalwert;
anzahl = sc.nextInt();
feld = new int[anzahl];
index = 0;
while ( index < anzahl )
{
feld[index] = sc.nextInt();
index = index + 1;
}
maximalwert = feld[0];
index = 0;
for(index = 0;index < anzahl; index++)
while(feld[index] > maximalwert) {
maximalwert = feld[index];
} System.out.println("Der größte Wert ist: " + maximalwert);
if (feld.length == 0) {
System.out.println("Die Eingabe ist leer.");
}
}
}
Bei positiven wie negativen Zahlen klappt das alles. Aber wenn die Eingabe 0 ist, kommt ein Fehler:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Uebung03_A2.main(Uebung03_A2.java:27).
Bin seit vielen Stunden auf der Suche nach der Ursache und habe vieles versucht in der letzten if-Bedingung oder oben in der for-Schleife (genauer dem Index) zu ändern, ohne Erfolg.
Könnt ihr mich unterstützen?
Bitte auch angeben um welche Zeile in deinem Code es sich dabei handelt
Ich nehme mal an um folgende maximalwert = feld[0];. Das Problem ist wenn dein Array eine Länge von 0 hat kannst du auch nicht auf Index 0 zugreifen, dazu brauchst du ein Array mit min der Länge 1
So wie DerWissende schon sagt, müsstest du vorher prüfen ob dein Array "leer" ist.
Ansonsten sind mir noch Kleinigkeiten augefallen:
Java:
maximalwert = feld[0];
index = 0;
for(index = 0;index < anzahl; index++)
while(feld[index] > maximalwert) {
maximalwert = feld[index];
} System.out.println("Der größte Wert ist: " + maximalwert);
if (feld.length == 0) {
System.out.println("Die Eingabe ist leer.");
}
Du kannst dir ein index = 0 sparen, entweder setzt den Wert vor der Schleife zurück oder eben im Schleifenkopf
Anstatt die Variable maximalWert mit dem 1.Wert aus dem Array zu initialisieren, verwende stattdessen https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MIN_VALUE
Überlege dir auch ob du deine while-Schleife wirklich benötigst bzw. ob sie so korrekt ist ... mach am besten einen Schreibtischtest dazu.
Der Code kompiliert zwar so, aber verwende trotzdem { } für deine for-Schleife und achte auf eine korrekte Einrückung. So wie dein Code formatiert ist schaut es aus als wäre die while-Schleife die Ausgabe und die if-Bedingung Teil deiner for-Schleife.
Vielen Dank für die Beiträge.
Also ja den überflüssigen index = 0 habe ich entfernt und die Klammersetzung ergänzt unten.
Hmm, da ich auch ziemlich (blutiger) Anfänger bin, wüsste ich jetzt nicht, wie ich dieses MIN_VALUE oder MAX_VALUE einsetze in meinem Code. Mit maximalwer = feld[0] komme ich da besser klar.
1) Ich wüsste nicht warum eine Konstante wie MIN_VALUE eine magische Zahl ist.
2) + 3) Was hat MAX_VALUE damit zu tun?
4) Warum plötzlich eine do-while Schleife? Es ging darum einen passenden Initialwert zum Vergleichen zu haben
Wie schon oben gesagt: Musst du davor aber prüfen ob das Array überhaupt eine Länge > 0 hat. Oder eben wie JStein52 gezeigt hast MIN_VALUE einfach setzen.
Beide Varianten sind in Ordnung, verwende einfach das was du am besten verstehst.