if-Bedingung funktioniert nicht

Endymion

Bekanntes Mitglied
Java:
package strings;
import java.io.FileNotFoundException;
import main.*;
import javax.swing.*;
public class StringToMorseCodeEncoder
{
	static JFrame f;
	public StringToMorseCodeEncoder() throws FileNotFoundException
	{
		String morseCode = "";
		String[][] morseCodeAlphabet = {{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}, {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."}};
		String s = Utils.enterFileOrString(f, "Enter the string you want to encode to Morse Code");
		for(int i = 0; i <= s.length(); i++)
		{
			char c = s.charAt(i);
			if(c >= 'A' && c <= 'Z')
			{
				morseCode += morseCodeAlphabet[0][c - 'A'] + "";
			}
			if(c >= '0' & c <= '9');
			{
				morseCode += Integer.parseInt("" + c) + " ";
			}
		}
		JOptionPane.showMessageDialog(f, morseCode, "Morse Code", 1);
	}
}
Wenn ich den Buchstaben H im JOptionPane eingebe, bekomme ich folgende Fehlermeldung:
Exception in thread "main" java.lang.NumberFormatException: For input string: "H"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at strings.StringToMorseCodeEncoder.<init>(StringToMorseCodeEncoder.java:22)
at main.Main.starter(Main.java:108)
at main.Main.main(Main.java:31)
Anscheinend ergeben beide Bedingungen in der if-Bedingung true, obwohl 'H' größer '9' ist. Was mache ich falsch?
 
Errors detected: 2

Java:
for(int i = 0; i <= s.length(); i++)
if(c >= '0' & c <= '9');

Ein wenig genauer arbeiten. 😉
 
Zuletzt bearbeitet:
Hi,
warum speicherst du eigentlich den Code in einem 2D-Array 1Dimensional ab?
Alle zugriffe erfolgen doch über [0][irgendwas].

Insgesamt dürftest du es bei den Umwandlungen etwas leichter machen, wenn du einfach eine hashmap nimmst und die entsprechenden einträge (char / morsestring) als datenpaare reinpackst.
Das lässt sich dann auch leichter um Satzzeichen etc erweitern.
Gruß
 
Was Volvagia geschrieben hat sollte zunächst wirklich berichtigt werden, da diese zwei Zeilen wirklich Fehler enthalten. Danach sollte es so funktionieren, wie du dir das denkst.

Weiterhin müsstest du aber noch Sonderfälle wie 'ß' oder sämtliche Umlaute berücksichtigen.
Die würden in deinem Code nämlich im Moment einfach ignoriert.
 
@Firephoenig: Weil ich, wenn das mit normalen Zeichen erst mal funktioniert, das auch noch mit Zahlen machen will, wozu ich dann zugriff auf [1][c-'0'] machen will.
@MarderFahrer: Ich finde den Fehler nicht.
 
Java:
package strings;
import java.io.FileNotFoundException;
import main.*;
import javax.swing.*;
public class StringToMorseCodeEncoder
{
	static JFrame f;
	public StringToMorseCodeEncoder() throws FileNotFoundException
	{
		String morseCode = "";
		String[][] morseCodeAlphabet = {{".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."}, {"-----", ".----", "..---", "...--", "....-", ".....", "-....", "--...", "---..", "----."}};
		String s = Utils.enterFileOrString(f, "Enter the string you want to encode to Morse Code");
		for(int i = 0; i <= s.length(); i++)
		{
			char c = s.charAt(i);
			if(c >= 'A' && c <= 'Z')
			{
				morseCode += morseCodeAlphabet[0][c - 'A'] + "";
			}
			if(c >= '0' && c <= '9')
			{
				morseCode += Integer.parseInt(morseCodeAlphabet[1][c - '0']);
			}
		}
		JOptionPane.showMessageDialog(f, morseCode, "Morse Code", 1);
	}
}
So siehts jetzt aus. Wenn ich aber das Wort Hallo123 eingebe, bekomme ich folgende Fehlermeldung:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.charAt(Unknown Source)
at strings.StringToMorseCodeEncoder.<init>(StringToMorseCodeEncoder.java:15)
at main.Main.starter(Main.java:108)
at main.Main.main(Main.java:31)
 
Zuletzt bearbeitet:
Volvagia hatte ja schon auf zwei Fehler hingewiesen, && war kein richtiger Fehler,
schau dir den Schleifenindex an
 
& bedeutet bloß, dass auch "c <= '9'" ausgewertet wird, selbst wenn "c >= '0'" bereits false zurückgeliefert hat. Das ändert nichts am Rückgabewert der Abfrage, sondern kann verwendet werden, wenn 2 Methoden immer abgearbeitet werden müssen, da && aufhört, wenn die Erste false zurückliefert, da das Ergebnis der Bedingung niemals true sein kann. (Kurzschluss)

Du musst "i <= s.length();" noch zu "i < s.length();" oder (nicht so schön) "i <= (s.length() - 1);" machen, sonst fliegt dir eine OutOfBoundsExc.
 

Neue Themen


Zurück
Oben