Eine ArrayList auf gleiche Inhalte prüfen

Lim

Mitglied
Hallo zusammen, ich bin recht neu in der Welt des Programmierens und komme gerade einfach nicht weiter.

Die Aufgabe lautet:
Eine Textdatei soll in eine Liste Wort für Wort eingelesen werden und in anschleissend soll in der Client Classe (main) in dieser Liste überprüft werden, ob sie mehrfach das selbe Wort(String) enthällt wenn ja zählen wie oft es vorkommt.


Das ist momentan meine Listenklasse, welche mir die einzelnen Worte der Text datei in eine Liste speichern soll, aber irgendwie scheint ich da noch etwas nicht richtig zu machen. Des weiteren habe ich keinen schimmer wie ich eine Liste mit sich selbst vergleichen soll... bis jetzt kann ich nur 2 listen miteinander Vergleichen und das soll es ja nicht sein. köntnet ihr mir mit einem Denkanstoß helfen?

Java:
public class Wortliste {

	private String filename = null;;
	
	public Wortliste(String filename){
		this.filename=filename;
	}
	
	public void leseText() throws FileNotFoundException {
		FileReader fr = new FileReader(filename);
		BufferedReader br = new BufferedReader(fr);
		
		String[] stringarray = null;
		List<String> meineListe = Arrays.asList(stringarray);
		try {
			stringarray = br.readLine().split(" ");
			for(String element : meineListe) {
				System.out.println("element: " + element);
				meineListe.add(element);
			}//try
		} catch (IOException e) {
			e.printStackTrace();
		}//catch
	}//leseText
	
}//Class
 

Michael...

Top Contributor
Der Code ist etwas "komisch" und wirft am Dateiende eine NullpointerException

Zunächstmal Liste anlegen:
Code:
List<String> meineListe = new ArrayList<String>();
Dann mittels BufferedReader in einer Schleife die Datei zeilenweise einlesen
Code:
String line;
while((line=br.readLine())!=null) {
Dann die Zeile splitten und die erhaltenden Wörter in die Liste einfügen.

Ob man eine Liste mit sich selbst oder einer anderen Liste vergleicht ist egal - funktioniert beides genau gleich.
Hilfreich wäre es die Liste vorher zu sortieren (Collections.sort(....)) so stehen gleiche Wörter hintereinander. Hilfreich wäre auch eine Liste oder eine Map in der die Worte nur einmal vorkommen, irgendwo muss ja auch die Anzahl gespeichert werden.
 

jgh

Top Contributor
hier zumindest mal dein Code, der dann auch das macht, was du eigentlich wolltest:
wie oft nun jedes Wort vorkommt, hat Michael dir ja schonmal ein paar Tipps gegeben...

Java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Wortliste {

	private String filename = null;;

	public Wortliste(String filename) {
		this.filename = filename;
	}

	public void leseText() throws IOException {
		FileReader fr = new FileReader(filename);
		BufferedReader br = new BufferedReader(fr);

		List<String> meineListe = new ArrayList<String>();
		String s = null;
		while ((s = br.readLine()) != null) {
			String[] line = s.split(" ");
			for (String element : line) {
				System.out.println("element: " + element);
				meineListe.add(element);
			}

		}// leseText

	}
}

class Client {
	public static void main(String[] args) {
		try {
			new Wortliste("filetest.txt").leseText();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
 

Lim

Mitglied
so... ich nochmal, ich habe das nun auf anweisung meines Teamchefs alles 3 mal wieder über den haufen geshcmissen und nun ist es theoretishc so wie er es haben möchte, aber irgendwo habe ich wohl dennoch einen Fehler, den meine for-schleife schleift nur ein einziges mal. oder zumindest ist es in der Ausgabe am ende dann so...

hier mein erweiterter Code (zu dem umgestellten siehe oben):

Java:
import java.util.Collections;
import java.util.List;

public class Sortieren {
	
	private List<String> meineWortliste = null;
	
	public Sortieren(List<String> meineWorteliste) {
		this.meineWortliste = meineWorteliste;
	}
	public void sortiertwerden() {
		
		Collections.sort(meineWortliste,String.CASE_INSENSITIVE_ORDER);		
		for(String wort : meineWortliste){
			System.out.println("Wort:" + wort);
		}
	}
	  
}

Java:
import java.util.ArrayList;
import java.util.List;

public class Zaehlen {
	
	private List<String> sortedList = null;
	private List<Wortanzahl> meineWorte = null;
	
	public Zaehlen(List<String> sortedList) {
		this.sortedList = sortedList;
		this.meineWorte = new ArrayList<Wortanzahl>();
	}
		
	public void zaehler() {

		for(String einWort : sortedList){
			if(this.meineWorte.isEmpty()) {
				Wortanzahl wortAnzahl = new Wortanzahl(einWort, 1);
				this.meineWorte.add(wortAnzahl);
			}else{
			for (Wortanzahl element: meineWorte) {
				if(element.getWort().equals(einWort)){
					element.getAnzahl();
					element.setAnzahl(+1);
				}//if
			    }//for
                                   }//else
		}//for
		for(Wortanzahl index : meineWorte){
			System.out.println(index.getAnzahl() + "," + index.getWort());
		}		
	}//zaehler
	
	public class Wortanzahl{
		private String wort = null;
		private int anzahl = 0;
				
		public Wortanzahl(String wort, int anzahl) {
			this.wort = wort;
			this.anzahl = anzahl;
		}
		/**
		 * @return the wort
		 */
		public String getWort() {
			return wort;
		}
		/**
		 * @param wort the wort to set
		 */
		public void setWort(String wort) {
			this.wort = wort;
		}
		/**
		 * @return the anzahl
		 */
		public int getAnzahl() {
			return anzahl;
		}
		/**
		 * @param anzahl the anzahl to set
		 */
		public void setAnzahl(int anzahl) {
			this.anzahl = anzahl;
		}
	}
}

könnte mir jemand auf die Sprünge helfen wo ich da grade gedanklich mich verschleift habe?
 
Zuletzt bearbeitet:

jgh

Top Contributor
also nur schnell mal überflogen:

[JAVA=14]
public void zaehler() {

for(String einWort : sortedList){
if(this.meineWorte.isEmpty()) {
Wortanzahl wortAnzahl = new Wortanzahl(einWort, 1);
this.meineWorte.add(wortAnzahl);
}
for (Wortanzahl element: meineWorte) {
if(element.getWort().equals(einWort)){
element.getAnzahl();
element.setAnzahl(+1);
}//if
}//for

}//for[/code]

wenn deine Liste [c]meineWorte[/c] leer ist, addest du ein Wort...und wenn sie nicht leer ist, ja dann machst du irgendwie nichts...kann das atm allerdings nicht ausprobieren, aber ich tippe mal da liegt der Hase im Pfeffer :D
 

Lim

Mitglied
*Kopf Tisch*
Danke, ich ahb das mal geändert, nun solte er was tun, aber er macht so immer noch nicht das richtige...

Java:
public void zaehler() {

		for(String einWort : sortedList){
			if(this.meineWorte.isEmpty()) {
				Wortanzahl wortAnzahl = new Wortanzahl(einWort, 1);
				this.meineWorte.add(wortAnzahl);
			}
			for (Wortanzahl element: meineWorte) {
				if(element.getWort().equals(einWort)){	
					int zahl = element.getAnzahl();
					zahl = zahl++;
					element.setAnzahl(zahl);
				}//if
			}//for
			
		}//for
		for(Wortanzahl index : meineWorte){
			System.out.println(index.getAnzahl() + "," + index.getWort());

		}		
	}//zaehler
 

jgh

Top Contributor
es bleibt immer noch das gleiche Problem...du addest deiner Liste
Code:
meineWorte
nur dann ein Wort, wenn diese leer ist, also genau 1x !!!!
und da in der Liste
Code:
meineWorte
nur ein einziges Wort vorhanden ist, kannst du vergleichen wie du willst...das einzige was geht, ist die Anzahl zu erhöhen...

ich habe diese Aufgabe gelöst, aber die Lösung einfach zu posten wäre zu billig...sollst ja auch was davon haben.
Als Tipp: lass diese
Code:
isEmpty()
if-Abfrage erstmal weg und schau dann mal weiter...
 

jgh

Top Contributor
Das war mein erster Anwortsentwurf...bevor er ganz umsonst war^^
Einige Fehler hast du ja schon ausgebessert.

[ot]also...dein Fehler liegt in der
Code:
zaehler()
-Methode, nach etwas längerem Basteln habe ich auch eine Lösung, aber die einfach so zu posten, mmmh ne sollst lieber selber drauf kommen.

Du hast ja 2 Listen, eine
Code:
sortedList
und eine
Code:
meineWorte
, die eine ist sortiert und die andere noch leer.

Java:
for (String einWort : sortedList) {
			//du iterierst über deine sortiere Liste, soweit ok...
			if (this.meineWorte.isEmpty()) {
				//du fragst bei jedem Wort nach, ob diese Liste leer ist...
				//wenn diese Liste leer ist, addest du der Liste den Datentyp Wortanzahl mit 1 und dem Wort aus der sortierten Liste, bei dem du dich befindest
				Wortanzahl wortAnzahl = new Wortanzahl(einWort, 1);
				this.meineWorte.add(wortAnzahl);
			} else {//wenn diese Liste aber nicht mehr leer ist...also nach dem 1. Durchgang, 
				//läufst du über deine Liste meineWorte und vergleichst das aktuelle Wort mit deiner Liste, wenn du es findest...machst du komische Sachen, wenn nicht machst du garnichts
				
				for (Wortanzahl element : meineWorte) {
					if (element.getWort().equals(einWort)) {
						 element.getAnzahl();//mit diesem Wert machst du nichts
                    element.setAnzahl(+1);//mit dieser Zeile setzt du die Anzahl immer auf 1
//element.setAnzahl(element.getAnzahl()+1); dieses Codefragment erhöht die Anzahl um 1
					}// if
				}// for
			}// else
		}// for
[/ot]
 

Michael...

Top Contributor
Zum einen ist die if isEmpty Abfrage überflüssig/falsch zum anderen musst Du nicht bei jedem Wort durch die gesamte Liste "meineWorte" iterieren. Da der Input ja eine sortierte Liste ist musst Du ja nur prüfen ob das "neue" Wort mit dem zuvor gelesenen Wort übereinstimmt. Es Reicht also eine if-Abfrage.

Code:
if aktuelles Wort == Vorgänger 
    increase wortzahl 
else
    new wortzahl
    meineWorte.add wortzahl
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
L Collections Ist eine Arraylist hier das richtige? Java Basics - Anfänger-Themen 12
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
K Variablen Ist es möglich eine ArrayList vom Typ Array zu erstellen? Java Basics - Anfänger-Themen 2
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
D Bestimmte Werte von Objekten aus einer ArrayList in eine andere ArrayList kopieren Java Basics - Anfänger-Themen 14
A Wie bekomme ich zwei Strings in eine ArrayList Java Basics - Anfänger-Themen 4
S ArrayList in eine Txt-Datei speichern Java Basics - Anfänger-Themen 3
N XML-Datei in eine ArrayList Java Basics - Anfänger-Themen 6
J ArrayList<Point> in eine neue ArrayList<Point> kopieren Java Basics - Anfänger-Themen 8
G Die Objekte eine ArrayList sortieren Java Basics - Anfänger-Themen 50
G Eine ArrayList effizient sortieren Java Basics - Anfänger-Themen 5
M Allgemein Array in eine ArrayList überführen? Java Basics - Anfänger-Themen 7
J Objekte einer ArrayList in eine Tabelle einfügen Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
M Vergleichen, ob eine Liste länger als andere ist Java Basics - Anfänger-Themen 6
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
Kingdako Wie löse ich eine Mathematische Formel mit Arrays und Schleifen? Java Basics - Anfänger-Themen 32
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
M mit Maven eine ausführbare Jar bauen Java Basics - Anfänger-Themen 7
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
M Eine Funktion zuweisen Java Basics - Anfänger-Themen 3
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
S Eine Idee umsetzen ganz schnell!? Java Basics - Anfänger-Themen 68
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
jeff98 Wie kann man in Java eine Zeichenformation ausgeben? Java Basics - Anfänger-Themen 9
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
A Eclipse IDE - Wie bekomme ich eine ältere Version Java Basics - Anfänger-Themen 6
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Warum muss man manchmal in der RUnmethode sleep in eine schleife tun? Java Basics - Anfänger-Themen 9
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
L Anpassung der Spaltenbreite auch auf eine zweite Tabelle anwenden Java Basics - Anfänger-Themen 8
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
JordenJost Java ist auch eine Insel für Anfänger Java Basics - Anfänger-Themen 2
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
berserkerdq2 Überprüfen ob eine Schreibberechtigung auf ein file exisitert bzw. ob man dieses file löschen kann, wie? Java Basics - Anfänger-Themen 9
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
M Wie richte ich eine Diagonale an Robotern in einer World ein? Java Basics - Anfänger-Themen 15
O Wie erstelle ich eine Instanz in einer Klasse für die ich die Instanz will? Java Basics - Anfänger-Themen 4
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Kann ich eine jar anschauen wie sie gecoded wurde? Java Basics - Anfänger-Themen 2
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
B Programm, dass alle 3 Tage eine Webseite öffnet? Java Basics - Anfänger-Themen 20

Ähnliche Java Themen

Neue Themen


Oben