Moin Community,
ich bin noch ein Anfänger und wollte alles etwas testen.
Ich hatte mir ein Array mit Namen erstellt und wollte bestimmt Einträge auf Abfrage ändern können.
Leider kommt immer eine Fehlermeldung, und ich finde den Fehler nicht:
Code:
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Test.main(Test.java:16)"
Mein Code:
Java:
importjava.util.Arrays;classTest{publicstaticvoidmain(String[] args ){String[] namen ={"Pascal","Tom","Thorsten","Julian","Ute"};System.out.println("Welcher Name soll verändert werden?");String namedelete =new java.util.Scanner(System.in ).nextLine();System.out.println("Welcher Name soll hinzugefügt werden?");String namenew =new java.util.Scanner(System.in ).nextLine();int counter =0;for(int i =0; i <= namen.length; i++){if( namen[i]== namedelete ){break;}else{
counter++;}}
namen[counter]= namenew;System.out.println(Arrays.toString( namen ));}}
1. Code bitte immer in Code-Tags. Entweder wie in meiner Signatur zu sehen oder im Editor auf den "Einfügen"-Button (4. von Rechts) -> Code einfügen.
2. Array-Indizes beginnen in Java bei 0 .. daher hat ein Array der Länge 5 Indizes von 0 .. 4. Daher darf deine Schleife nicht bis <=namen.length gehen.
Also du brauchst nur eine Scannerinstanz, Strings vergleicht man mit equals und dann haben Arrays die Indizes von [0, array.length[ (d.h. wenn es eine Länge von 3 hat dann gibt es die Indizes: 0, 1, 2).
Ein Ratschlag: Teile und Herrsche. Das bedeutet: Wenn man ein größeres Problem hat zerlege es zuerst in kleinere Teilprobleme. Löse diese einzeln. Dann löse das große Problem durch Zusammenfügen der Teillösungen.
Du möchtest.
1) Einen Namen eingeben.
Code:
public static String inputText(Scanner in, String label)
2) Einen Namen in einem Array finden.
Code:
public static int findName(String[] data, String Name)
3) Das Array anzeigen.
Code:
public static void printData(String[] data)
Also Die die Funktionen schreiben und dann zusammenfügen.
Code:
import java.util.Scanner;
class Test {
public static void main(String[] args) {
String[] namen = { "Pascal", "Tom", "Thorsten", "Julian", "Ute" };
Scanner in = new Scanner(System.in);
printData(namen);
String name = inputText(in, "Welcher Name soll verändert werden?");
int index = findName(namen, name);
if (index == -1)
System.out.println(name + " ist nicht in den Daten enthalten!");
else {
namen[index] = inputText(in, "Geben Sie den neuen Namen ein!");
printData(namen);
}
in.close();
}
public static String inputText(Scanner in, String label) {
System.out.print(label + ":\t");
return in.nextLine();
}
/**
* Find name's index in a array of strings.
*
* @param data
* String array containig data.
* @param name
* Pattern for serach.
* @return Index of searched pattern or negative value if not found.
*/
public static int findName(String[] data, String name) {
if (data == null || data.length == 0 || name == null)
return -1;
for (int i = 0; i < data.length; i++) {
if (data[i].equals(name)) {
return i;
}
}
return -1;
}
/**
* Prints data.
*
* @param data
*/
public static void printData(String[] data) {
for (String s : data)
System.out.println(s);
}
}
Wenn man dieses Prinzip verfolgt, löst man alle Probleme viel einfacher und übersichtlicher.
PS: Wenn Du das Programm erweitern möchtest sind die Funktionen dann wieder verwendbar.