Zum Forum springen
Benachrichtigungen
Alles löschen

Morsecodierung [GELÖST]

7 Beiträge
4 Benutzer
0 Reactions
1,025 Ansichten
grimbadul
Beigetreten: 20.08.2009

hi,
programmier gerade nen Morse-code mit java. Dazu hab ich zwei ArrayLists für die Buchstaben und Morsezeichen erstellt. Dazu gibt es noch zwei Methoden(getMorseCode, der einen Buchstaben übernimmt und morse zurückgibt und encode der String text bekommt und die Morse dazu ausgibt)
Komischerweise klappt alles, wenn ich nur Buchstaben von A-T verwende, alles wird perfekt übersetzt. Allerdings kommt folgernder Fehler, wenn ich Buchstaben ab U verwende:

Spoiler

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -40 at java.util.ArrayList.get(Unknown Source) at Morse.getMorseCode(Morse.java:107) at Morse.encode(Morse.java:129) at ***.Morse.main(Morse.java:99)

Der Fehler muss in der getMorseCode-Methode liegen, die das U bekommt, aber keinen passenden Morse zurückgibt!
Verstehe aber nicht wieso es bei U++ nicht funktioniert, aber bei A-T schon? Schließlich kann ja kein Fehler in der Methode sein und in der ArrayList hab ich alle standardmäßig mit add importiert!
danke für jegliche Hilfe


Antwort
Zitat
6 Antworten
DeathDraw
Beigetreten: 12.01.2007

Wie holst du dir die Morsezeichen aus der ArrayList? indexOf(Object o)? Wenn du das U nicht richtig geadded hast, kann dir indexOf eine -1 liefern die dann natürlich ausserhalb des Bereichs liegt und dann die aioob wirft.

//Edit: prüfe am besten immer mit contains(Object o) oder auf -1 bei indexOf(Object o) ob das Ding auch wirklich in deiner ArrayList ist bevor du darauf zugreifst.

//Edit2: Hab mir nochmal die Struktur der ArrayList angeschaut... Wie bildest du denn eigentlich das Alphabet auf die ArrayList ab? ASCII?

//Edit3: Wie bildest du die Buchstaben/Codes auf die zwei Listen ab?


Antwort
Zitat
sarc
Beigetreten: 06.06.2008

HashMap ist dein Freund. :)


Antwort
Zitat
DeathDraw
Beigetreten: 12.01.2007

Original von sarc
HashMap ist dein Freund. :)

Hätte ich auch gesagt =)

Ist die ArrayList die Vorgabe? Ansonsten nimm wirklich lieber die HashMap.

Habe mal aus jux eine Implementierung mit der ArrayList auf Basis von ASCII gewagt und habe keine Probleme mit U++ Zeichen ?( Scheint wohl bei deinem add was schiefgelaufen zu sein.

Spoiler
import java.util.*;

class Morse{
	static ArrayList<String> alphabet;
	
	public static void main(String[] args){
		alphabet = new ArrayList<String>();
		alphabet.add(".-");
		alphabet.add("-...");
		alphabet.add("-.-.");
		alphabet.add("-..");
		alphabet.add(".");
		alphabet.add("..-.");
		alphabet.add("--.");
		alphabet.add("....");
		alphabet.add("..");
		alphabet.add(".---");
		alphabet.add("-.-");
		alphabet.add(".-..");
		alphabet.add("--");
		alphabet.add("-.");
		alphabet.add("---");
		alphabet.add(".--.");
		alphabet.add("--.-");
		alphabet.add(".-.");
		alphabet.add("...");
		alphabet.add("-");
		alphabet.add("..-");
		alphabet.add("...-");
		alphabet.add(".--");
		alphabet.add("-..-");
		alphabet.add("-.--");
		alphabet.add("--..");
		
		System.out.println(encode("TES1"));
	}
	static String encode(String text){
		String encoded = "";
		for(int i = 0 ; i < text.length(); i++)
		{
			encoded += getMorseCode(text.charAt(i)) + " ";
		}
		return encoded;
	}
	static String getMorseCode(char a){
		if(a-65 >= 0 && a-65 < 26)
			return alphabet.get(a - 65);
		return "NOT PART OF ALPHABET";
	}
}

Antwort
Zitat
grimbadul Themenstarter
grimbadul
Beigetreten: 20.08.2009

habs gelöst, lag daran, das ich in der getMorseCode-Methode über binarySearch den Index gesucht hatte. Das hat ab U++ komischerweise nicht funktioniert! bin dann einfach mit ner Schleife drüber und hab Index ausgelesen...
danke trotzdem für die Hilfe!
Gab keine Vorgabe für ArrayList, nur einen Verweis, dass wir Interface Collection verwenden können... Was ist denn der Vorteil von Hashmap?


Antwort
Zitat
sarc
Beigetreten: 06.06.2008

Du sparst dir die Suche und kannst den Code direkt mit dem Buchstaben verknüpfen.


Antwort
Zitat
MisterJ
Beigetreten: 26.03.2006

Original von grimbadul
habs gelöst, lag daran, das ich in der getMorseCode-Methode über binarySearch den Index gesucht hatte. Das hat ab U++ komischerweise nicht funktioniert! bin dann einfach mit ner Schleife drüber und hab Index ausgelesen...
danke trotzdem für die Hilfe!
Gab keine Vorgabe für ArrayList, nur einen Verweis, dass wir Interface Collection verwenden können... Was ist denn der Vorteil von Hashmap?

Hört sich auch überkompliziert an. Wenn du alles der Reihe nach reinschiebst, solltest du den Index ausrechnen können. A = 0, B = 1, usw.
Das wäre in dem Fall sogar effizienter als die Hashmap, welche für dein Vorhaben allerdings die korrekte Datenstruktur wäre. Effizienz bei 26 Zeichen ist aber auch scheißegal


Antwort
Zitat
Teilen: