Hallo,
ich hatte mich letztens schon mal mit meinem Morsecode Programm gemeldet, das läuft mittlerweile auch ganz gut, nun habe ich aber Fehler an dem ich einfach nicht weiter komme, wobei ich das schon tausend mal gemacht habe. Es geht ums einscannen
Wenn ich das Programm ausführe bekomme ich in der Methode Umwandeln() eine NoSuchElementException die sich auf das einscannen bezieht, ich hab in dem Codes bereits mehrere Scans verwendet. Deshalb verstehe ich nicht warum es jetzt nicht mehr funktioniert. Ich hoffe ihr könnt mit weiterhelfen
ich hatte mich letztens schon mal mit meinem Morsecode Programm gemeldet, das läuft mittlerweile auch ganz gut, nun habe ich aber Fehler an dem ich einfach nicht weiter komme, wobei ich das schon tausend mal gemacht habe. Es geht ums einscannen
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Morsecode {
Map<String, Character> Mcode = new HashMap<String, Character>();
public void Kodierung() {
Mcode.put(".-", 'A');
Mcode.put("-...", 'B');
Mcode.put("-.-.", 'C');
Mcode.put("-..", 'D');
Mcode.put(".", 'E');
Mcode.put("..-.", 'F');
Mcode.put("--.", 'G');
Mcode.put("....", 'H');
Mcode.put("..", 'I');
Mcode.put(".---", 'J');
Mcode.put("-.-", 'K');
Mcode.put(".-..", 'L');
Mcode.put("--", 'M');
Mcode.put("-.", 'N');
Mcode.put("---", 'O');
Mcode.put(".--.", 'P');
Mcode.put("--.-", 'Q');
Mcode.put(".-.", 'R');
Mcode.put("...", 'S');
Mcode.put("-", 'T');
Mcode.put("..-", 'U');
Mcode.put("...-", 'V');
Mcode.put(".--", 'W');
Mcode.put("-..-", 'X');
Mcode.put("-.--", 'Y');
Mcode.put("--..", 'Z');
Mcode.put("-----", '0');
Mcode.put(".----", '1');
Mcode.put("..---", '2');
Mcode.put("...--", '3');
Mcode.put("....-", '4');
Mcode.put(".....", '5');
Mcode.put("-....", '6');
Mcode.put("--...", '7');
Mcode.put("---..", '8');
Mcode.put("----.", '9');
Mcode.put(".-.-.-", '.');
Mcode.put("", ' ');
}
public String einlesen() throws IOException {
Scanner einlese = new Scanner(System.in);
String in;
System.out.println("Bitte Morsecode eingeben: \n");
in = einlese.nextLine();
if (in.isEmpty()) {
System.out.println("Leere oder fehlerhafte Eingabe");
einlese.close();
throw new IOException();
}
String ab;
System.out.println("Um Ihre Eingabe einzusehen tippen sie 1: ");
ab = einlese.nextLine();
if (ab.equals("1")) {
System.out.println("Ihre Eingabe: " + in);
}
else {
}
einlese.close();
return in;
}
public void umwandeln() throws IOException {
String ein = einlesen();
StringBuilder Liste = new StringBuilder();
String Woerter[] = ein.split(" ");
for (int i = 0; i < Woerter.length; ++i) {
String einzelneBuchstaben = Woerter;
String BuchstabenArray[] = einzelneBuchstaben.split(" ");
for (int c = 0; c < BuchstabenArray.length; ++c) {
Liste.append(Mcode.get(BuchstabenArray[c]));
}
}
System.out.println("A: Text wird auf dem Bildschirm ausgegeben");
System.out.println("B: Text wird in eine externe Datei gespeichert");
System.out.println(" ");
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
switch (input) {
case "A":
System.out.println(Liste.toString()); // Ausgabe des umgewandelten Codes
break;
case "B":
TextToFile(Liste.toString());
break;
}
// Statistik der Umwandlung
float anzB = 0;
for (char c1 : Liste.toString() // Berechnung der Statistik für die Anzahl der Buchstaben
.toCharArray()) {
if (c1 != ' ') {
anzB++;
}
}
float anzW = 0;
for (char c3 : Liste.toString()
.toCharArray()) {
if (c3 == ' ') {
anzW++;
}
}
anzW += 1; // Anzahl der Wörter wird nochmal hochgezählt dar der Code die Anzahl der Wörter
// anhand der Anzahl der Leerzeichen zwischen den Wörter errechnet, so würde immer
// ein Wort fehlen wenn man anzW nicht am Ende immer um 1 erhöht
// Durschnitt Der Wörter
float dw;
dw = anzB / anzW;
System.out.println("------ Statistik ------");
System.out.println("Anzahl der Buchstaben: " + anzB);
System.out.println("Anzahl der Wörter: " + anzW);
System.out.println("Durschnittslänge der Wörter : " + dw);
System.out.println("-----------------------");
}
public void CodeFromFile() throws FileNotFoundException {
File CodeFile = new File("MorseCode.txt");
Scanner rein = new Scanner(CodeFile);
while (rein.hasNext()) {
char Buchstabe = rein.next()
.charAt(0);
String code = rein.next();
Mcode.put(code, Buchstabe);
}
}
public void TextFromFile() throws FileNotFoundException, IOException {
File morseCode = new File("message.txt");
BufferedReader bufferedReader = new BufferedReader(new FileReader(morseCode));
String line;
String letter;
float anzW = 0;
float anzB = 0;
float dw = 0;
while ((line = bufferedReader.readLine()) != null) {
letter = "";
for (String morseLetter : line.split(" ")) {
letter = Mcode.get(morseLetter)
.toString();
System.out.print(letter);
for (char a : letter.toString() // Die Anzahl der Buchstaben werden gezählt
.toCharArray()) {
if (a != '.') {
anzB++;
}
}
}
if (letter.equals(".")) {
// Zeilenumbruch
System.out.println();
} else {
// Leerzeichen
System.out.print(' ');
}
anzW++; // Für jeden Schleifendurchlauf wird der Zähler erhöht = Anzahl der Wörter
// dar in jedem durchlauf ein Wort eingelesen wird
}
dw = anzB / anzW;
System.out.println("------ Statistik ------");
System.out.println("Anzahl der Buchstaben: " + anzB);
System.out.println("Anzahl der Wörter: " + anzW);
System.out.println("Durschnittslänge der Wörter : " + dw);
System.out.println("-----------------------");
}
public void Menue() throws IOException {
System.out.println("-------------------------------------------");
System.out.println("-- Willkommen im MorseCode-De/Enkodierer --");
System.out.println("-------------------------------------------");
System.out.println("Wähle Sie eine Option aus!");
System.out.println("A: Einlesen der Kodierung über das Programm");
System.out.println("B: Einlesen der Kodierung über externe Datei");
System.out.println(" ");
Scanner scan = new Scanner(System.in);
String input = scan.nextLine();
switch (input) {
case "A":
Kodierung();
if (Mcode.isEmpty()) {
System.out.println("Einlesen Fehlgeschlagen!");
break;
} else {
System.out.println("Einlesen der Kodierung Erfolgreich!");
break;
}
case "B":
try {
CodeFromFile();
if (Mcode.isEmpty()) {
System.out.println("Einlesen Fehlgeschlagen!");
break;
} else {
System.out.println("Einlesen der Kodierung Erfolgreich!");
break;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
System.out.println("Wähle Sie eine Option aus!");
System.out.println("A: Einlesen Ihres Codes per Manueller Eingabe");
System.out.println("B: Einlesen Ihres Codes per Externer Datei");
String secin = scan.nextLine();
switch (secin) {
case "A":
umwandeln();
break;
case "B":
try {
TextFromFile();
break;
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void TextToFile(String test) throws IOException {
FileWriter fw = new FileWriter("DeinText.txt");
BufferedWriter bw = new BufferedWriter(fw);
bw.write(test);
}
public static void main(String[] args) {
Morsecode mors = new Morsecode();
try {
mors.Menue();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Wenn ich das Programm ausführe bekomme ich in der Methode Umwandeln() eine NoSuchElementException die sich auf das einscannen bezieht, ich hab in dem Codes bereits mehrere Scans verwendet. Deshalb verstehe ich nicht warum es jetzt nicht mehr funktioniert. Ich hoffe ihr könnt mit weiterhelfen
Java:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at großeJavaAufgabe.Morsecode.umwandeln(Morsecode.java:158)
at großeJavaAufgabe.Morsecode.Menue(Morsecode.java:320)
at großeJavaAufgabe.Morsecode.main(Morsecode.java:348)