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.
Warum taucht bei folgendem Code, wenn ich diesen Code wo anders aufrufe (ich rufe ihn in der ausführbaren Klasse aus) der Fehler (siehe angefügtes Bild auf)?
Der Code, der in der andere Klasse ausgeführt wird:
Java:
package collection;
import htlgkr.util.*;
import java.util.*;
/**
*
* @author Philipp
*/
public class Dictionary
{
public void dictionary()
{
Map<String, String> d = new HashMap<>();
List<Map.Entry<String, String>> dict = new ArrayList<>();
In.open("Woerterbuch.txt");
while (In.done())
{
String line = In.readLine();
String[] woerter = line.split(";");
d.put(woerter[0], woerter[1]);
}
In.close();
print(d);
}
private void print(Map<String, String> d)
{
Out.println("Wörterbuch");
for (Map.Entry entry : d.entrySet())
{
Out.println(entry.getKey());
}
}
}
In dieser Klasse wird er ausgeführt (der Code):
Java:
public class Collection
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Dictionary p = new Dictionary();
p.dictionary();
}
}
Das kann nicht sein sonst käme ja diese Exception nicht. Hast du mal bis zur Exception gedebugged ? Liest du vielleicht als letztes eine leere Zeile ein ?
Das kann nicht sein sonst käme ja diese Exception nicht. Hast du mal bis zur Exception gedebugged ? Liest du vielleicht als letztes eine leere Zeile ein ?
Ich meine diese Prüfung solltest du auch in deinem Code einbauen bevor du auf die Elemente in woerter zugreifst und nicht warten bis eine Exception fliegt.
Vielleicht hat er einfach zu oberflächlich geprüft. Beispielsweise könnte er am BreakPoint zwei Wörter gesehen und das Programm dann durchlaufen lassen haben, ohne zu prüfen, ob das überhaupt die Iteration war, die die Exception wirft. Es schleicht sich ja auch gerne mal eine zusätzliche Zeilenschaltung am Dateiende ein.
for(int i=0; i<woerter.length;i++)
{
Out.println(woerter[i]); // Klasse Out.println ist in einem Paket meiner Schule und macht das gleiche wie System.out.println();
}
zwischen den beiden Codezeilen
Code:
String[]woerter=line.split("!");
und
Code:
d.put (woerter[0],woerter[1]);
überprüft ob zwei Elemente im Array sind und es waren zwei Elemente in jedem Array! Ansonsten hab ich nichts verändert!
for(int i=0; i<woerter.length;i++)
{
Out.println(woerter[i]); // Klasse Out.println ist in einem Paket meiner Schule und macht das gleiche wie System.out.println();
}
Dann ist da eben noch ein Fehler. Hast du eigentlich schon einen der zahlreichen Vorschläge direkt oder abgewandelt umgesetzt? Du kannst einfach die Fehlerbehandlung einbauen oder den Debugger vernünftig einsetzen oder Zusatzinformationen ausgeben und mit deiner Datei abgleichen, wie beispielsweise Arraylänge oder Schleifenzähler oder die Variable line (mit vorangestellten und abschliessenden Zusatzzeichen, um auch Ausgaben zu visualisieren) oder ... oder ... oder ....
Du musst dabei natürlich auch immer hinterfragen, welche Aussagekraft deine Tests haben. Du scheinst dir da hin und wieder selbst etwas vorzumachen.
package collection;
import htlgkr.util.*;
import java.util.*;
/**
*
* @author Philipp
*/
public class Dictionary
{
public void dictionary()
{
Map<String, String> d = new HashMap<>();
List<Map.Entry<String, String>> dict = new ArrayList<>();
In.open("Woerterbuch.txt");
while (In.done())
{
String line = In.readLine();
String[] woerter = line.split(";");
d.put(woerter[0], woerter[1]);
}
In.close();
print(d);
}
private void print(Map<String, String> d)
{
Out.println("Wörterbuch");
for (Map.Entry entry : d.entrySet())
{
Out.println(entry.getKey());
}
}
}
In dieser Klasse wird er ausgeführt (der Code):
Java:
public class Collection
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
Dictionary p = new Dictionary();
p.dictionary();
}
}
Warum heißt das Dictionary p (und nicht d)?
Wo kommt In her?
Arbeitet es nicht Objektorientiert?
Wieso heißt der Nichtkonstruktor dictionary fast genauso wie der Konstruktor (Verwechslung möglich)?
Wieso heißt das Package collection (auch Verwechslung möglich)?
Nimm besser BufferedReader.
Und summasummarum:
schreib doch wie der stand jetzt ist.
Und, kann es sein das du inzwischen ne andere Exception hast? (kommt mir irgendwie so vor, aber sorry wenn dem nicht so ist)