Erste Schritte Einen Array absuchen und Buchstaben zählen

Gonnex

Mitglied
Hallo,

ich soll in einer Aufgabe eine Textdatei einlesen, und diese durch einen gewünschten Buchstaben absuchen und die Anzahl zählen und ausgeben.

Folgendermaßen bin ich vorgegangen :

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 postcodeFile = new java.io.File("faust.txt");
		java.util.Scanner scanner = new java.util.Scanner(postcodeFile, "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.charAt(j) == 'a') anzahl++;
		}
		System.out.println(anzahl);
	}

}

An dieser Stelle wird mir ein Fehler angezeigt :
Java:
if (anArray.charAt(j) == 'a') anzahl++;

Die Meldung lautet : Cannot invoke charAt() on the array type String[].

Weis jemand wo das Problem liegt? Oder ist meine Vorgehensweise grundlegend falsch ?

Vielen Dank,
Gonnex
 
Zuletzt bearbeitet von einem Moderator:
Ja weiß ich. Guck dir mal genau den Typ von anArray an.

PS: Benutze sprechende Namen, die aus sich heraus sagen, wozu sie gut sind.
PPS: Java-Code bitte in Java-Tags, nicht in Code Tags 😉
 
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'){}
         }
   }

Gruß Helmut
 
Zuletzt bearbeitet:
Hallo, danke soweit.

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++) {
			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)


Danke im Voraus,
Gonnex
 
Zuletzt bearbeitet:
Moin,

Ja. Habe ich so auch bei mir stehen. Funktioniert leider trotzdem nicht.
Wo ??

Die Schleife sollte doch wohl so ausschauen:
Java:
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++;
       }
    }
}

Gruß
Klaus
 
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++) {
			for (int u = 0; u < anArray[j].length; u++) {
				if (anArray[j].charAt(u) == 'a') {
					anzahl++;
				}
			}
		}
		System.out.println(anzahl);
	}

}

In Zeile 25, in welcher anArray[j].length steht, bekomm ich dann eine Fehlermeldung "length cannot be resolved or is not a field
".
 
Verwende length() 😉 da du die Länge des String haben willst.

Nur length funktioniert nur bei Arrays!
 
Zuletzt bearbeitet:
Okay.
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++) {
			for (int u = 0; u < anArray[j].length(); u++) {
				if (anArray[j].charAt(u) == 'a') {
					anzahl++;
				}
			}
		}
		System.out.println(anzahl);
	}

}

Soweit wird das Akzeptiert. Allerdings bekomm ich in Zeile 25 jetzt einen Nullpointexeption.
Exception in thread "main" java.lang.NullPointerException
at Aufgabenblatt3.Aufgabe6.main(Aufgabe6.java:25)

Aber danke soweit !
 
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.
 
Moin,

Doch wo liegt der Fehler ist die Frage oder wie kann ich die Exeption umgehen?
Umgehen?
Halt die zweite Schleife nur durchlaufen, wenn das Element ungleich null ist .....

Der Array wurde ja eigentlich richtig einglesen und sollte an der Stelle nicht leer sein, habe die Textdatei ja zur Hand.
sollte ..... 😳
Wir haben sie nicht zur Hand und können es auch nicht beurteilen!
BTW: DAS Array 🙂

Warum setzt Du nicht in Zeile 24 eine Breakpunkt und schaust Dir im Debugger den Inhalt von "anArray" ???

Gruß
Klaus
 
Kann das Problem bei der Zeile liegen ?
Java:
for (int j = 0; j < anArray.length; j++) {

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);
	}

}

Mit dem Debugger bin ich leider nicht vertraut.
 
Kann das Problem bei der Zeile liegen ?
Java:
for (int j = 0; j < anArray.length; j++) {

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!

[EDIT]
Mit dem Debugger bin ich leider nicht vertraut.
Dann einfach mal ausprobieren, früht übt sich. Und es ist ein sehr nützliches Werkzeug beim Programmieren
[/EDIT]
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben