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.
Erste SchritteEinen Array absuchen und Buchstaben zählen
du speicherst jede Zeile des Textes in ein Feld des Arrays.
Wenn du überlegst versucht dein Code folgendes: Du versuchst den Buchstaben an der Zeile in der du gerade bist zu lesen.
Da passt was nicht. Du musst zuerst in jede Zeile und dann durch alle Buchstaben.
Stichwort doppelte Schleife:
Java:
for(int i = 0; i<anzahlZeilen; i++)//erst durch alle Zeilen
{
for(int u =0; u<StringArray[i].length;u++)//dann durch alle Buchstaben der Zeile in der du gerade bist
{
if(StringArray[i].charAt(u)=='a'){}
}
}
package Aufgabenblatt3;
import java.io.FileNotFoundException;
public class Aufgabe6 {
public static void main(String[] args) throws FileNotFoundException {
String anArray[] = new String[999999];
int i = 0;
java.io.File here = new java.io.File(".");
java.io.File faustFile = new java.io.File("faust.txt");
java.util.Scanner scanner = new java.util.Scanner(faustFile,"ISO-8859-1");
String aLine = "";
while (scanner.hasNextLine()) {
aLine = scanner.nextLine();
// System.out.println(aLine);
anArray[i] = aLine;
i++;
}
scanner.close();
int anzahl = 0;
for (int j = 0; j < anArray.length; j++) {
for (int u = 0; u < anArray.length; u++) {
if (anArray[j].charAt(u) == 'a') {
anzahl++;
}
}
}
System.out.println(anzahl);
}
}
Habe mal die doppelschleife angewendet.
Java:
anArray[i].length
wird bei mir nicht akzeptiert, deswegen anArray.length nur.
Bekomme allerdings die Meldung
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 67
at java.lang.String.charAt(Unknown Source)
at Aufgabenblatt3.Aufgabe6.main(Aufgabe6.java:25)
for (int j = 0; j < anArray.length; j++)
{
for (int u = 0; u < anArray[j].length; u++) // nur EIN Element absuchen !!
{
if (anArray[j].charAt(u) == 'a')
{
anzahl++;
}
}
}
Ja, so habe ich das auch verstanden. Doch wo liegt der Fehler ist die Frage oder wie kann ich die Exeption umgehen ? Der Array wurde ja eigentlich richtig einglesen und sollte an der Stelle nicht leer sein, habe die Textdatei ja zur Hand.
Denn wenn ich anstatt anArray.length z.B. 500 eingebe funktioniert es.
Wir haben den StringArray ja oben auf 99999 gesetzt. Ist das vielleicht das Problem ?
Dann sollte ja, sobald die Zeile J leer ist, die zweite schleife nichtmehr ausgeführt werden oder ?
Habe das auch probiert, aber klappt nicht.
Java:
package Aufgabenblatt3;
import java.io.FileNotFoundException;
public class Aufgabe6 {
public static void main(String[] args) throws FileNotFoundException {
String anArray[] = new String[999999];
int i = 0;
java.io.File here = new java.io.File(".");
java.io.File faustFile = new java.io.File("faust.txt");
java.util.Scanner scanner = new java.util.Scanner(faustFile,
"ISO-8859-1");
String aLine = "";
while (scanner.hasNextLine()) {
aLine = scanner.nextLine();
// System.out.println(aLine);
anArray[i] = aLine;
i++;
}
scanner.close();
int anzahl = 0;
for (int j = 0; j < anArray.length; j++) {
if (anArray[j].length() != 0) {
for (int u = 0; u < anArray[j].length(); u++) {
if (anArray[j].charAt(u) == 'e') {
anzahl++;
}
}
} else {
}
}
System.out.println(anzahl);
}
}
Denn wenn ich anstatt anArray.length z.B. 500 eingebe funktioniert es.
Wir haben den StringArray ja oben auf 99999 gesetzt. Ist das vielleicht das Problem ?
Ja das ist das Problem.
Dein String[] kann 99999 Einträge fassen, sobald das Array initialisiert wird sind aber alle diese Einträge "null".
In deiner while-Schleife befüllst du aber sicher nicht immer alle 99999 möglichen Indexes, daher bleibt eine gewisse Anzahl leer -> null.
Später gehst du dein Array durch (dein Array ist eben 99999 lang), aber ab einen gewissen Index steht nichts mehr auf dem Array.
Lösung: In der while-Schleife zählst du mit der Variable "i" mit. Verwende diese als "Grenze" bei der Bedingung deiner for-Schleife!