Hallo, ich weiss mal wieder nicht was ich falsch mache :-(.
Ich habe mir zwei Array's gebastelt, das eine char[]-Array ist mit allen Möglichen Zeichen gefüllt, und das andere String[]-Array ist mit ZahlenStrings gefüllt.
Wenn ich mit lenth() die Größe (Anzahl der enthaltenen Elemente) des char[]-Arrays bekommen möchte gibt er mir 100 aus, bei den Zahlen gibt er mir 97 aus.
Jetzt die erste Seltsamkeit das char[]-Array beinhaltet meiner Meinung nach jedoch nur 97-Elemente (ich habe mir sogar die Arbeit gemacht und alle Zeichen auf ein Blatt aufzuschreiben und darunter die Zahlen), dass String[]-Array dagegen gibt es mir so aus wie ich will, es beinhaltet die Zahlen 1 - 97 in Zeichenfolgenform.
Jetzt habe ich den Inhalt aus einen Textfeld genommen, der eingegebene String wird nach Zeichen durchsucht die in meinen char[]-Array enthalten sind und werden dann durch die entsprechende Zeichenfolge im String-Array ersetzt. Beispielsweise beinhaltet das Textfeld den Buchstaben 'A' so wird dieser durch "87" ersetzt, der Buchstabe 'B' durch "86" usw..
Das klappt auch alles wunderbar, ausser bei ein paar Ausnahmefällen:
(1) enthält das Textfeld eine Zahl zwische 0 und 8 (welche den Zahlen 97 - 89 entsprechen) so stürzt das Programm ab
(2) Die letzten beiden Zeichen meines char[]-Array's sind '³' und '@', bei ihnen gibt das Programm nicht die entsprechenden Zahlen (02 und 01) aus sondern das Zeichen selber
(3) Enthält das Textfeld mein 3't letztes Zeichen meines char[]-Arrays ('²' welches 03 entspricht) bekomme ich diese Fehlermeldung
Die Fälle mit den letzten drei Zeichen meines char[]-Arrays liegen wahrscheinlich daran das er sagt das mein char[]-Array 100 Zeichen beinhaltet, aber wie gesagt, ich habe es schon mehrmals nachgezählt, entweder bin ich zu blöde, oder ich weiß auch nicht. Ich hatte auch mal noch 3 Zeichenketten zu meinen String Array hinzugefügt, allerdings waren dadurch die ganzen Werte verschoben was an und für sich ja nicht so schlimm ist, aber mich wunderts een warum er mir sagt das char[]-Array hat 100 Zeichen.
Bei den Fällen von den Zahlen von 0 - 8 dachte ich zuerst es liegt daran das ich die zu ersetzenden Zeichen durch Zeichenketten von "1" bis "9" nicht "01", "02", "03"... gemacht habe, dann habe ich es allerdings so geändert das jedes Zeichen welches ersetzt wird eine Zeichenfolge mit 2 Zeichen bekommt, aber der Fehler blieb bestehen.
Hier ist die Methode mutate, würde mich freuen wenn ihr mir helfen könnt:
Ich habe mir zwei Array's gebastelt, das eine char[]-Array ist mit allen Möglichen Zeichen gefüllt, und das andere String[]-Array ist mit ZahlenStrings gefüllt.
Wenn ich mit lenth() die Größe (Anzahl der enthaltenen Elemente) des char[]-Arrays bekommen möchte gibt er mir 100 aus, bei den Zahlen gibt er mir 97 aus.
Jetzt die erste Seltsamkeit das char[]-Array beinhaltet meiner Meinung nach jedoch nur 97-Elemente (ich habe mir sogar die Arbeit gemacht und alle Zeichen auf ein Blatt aufzuschreiben und darunter die Zahlen), dass String[]-Array dagegen gibt es mir so aus wie ich will, es beinhaltet die Zahlen 1 - 97 in Zeichenfolgenform.
Jetzt habe ich den Inhalt aus einen Textfeld genommen, der eingegebene String wird nach Zeichen durchsucht die in meinen char[]-Array enthalten sind und werden dann durch die entsprechende Zeichenfolge im String-Array ersetzt. Beispielsweise beinhaltet das Textfeld den Buchstaben 'A' so wird dieser durch "87" ersetzt, der Buchstabe 'B' durch "86" usw..
Das klappt auch alles wunderbar, ausser bei ein paar Ausnahmefällen:
(1) enthält das Textfeld eine Zahl zwische 0 und 8 (welche den Zahlen 97 - 89 entsprechen) so stürzt das Programm ab
(2) Die letzten beiden Zeichen meines char[]-Array's sind '³' und '@', bei ihnen gibt das Programm nicht die entsprechenden Zahlen (02 und 01) aus sondern das Zeichen selber
(3) Enthält das Textfeld mein 3't letztes Zeichen meines char[]-Arrays ('²' welches 03 entspricht) bekomme ich diese Fehlermeldung
Code:
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 97
at Passprot.mutate(Passprot.java:252)
at View$2.actionPerformed(View.java:89)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1461)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1515)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:392)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:264)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:254)
at java.awt.Component.processMouseEvent(Component.java:3799)
at java.awt.Component.processEvent(Component.java:3628)
at java.awt.Container.processEvent(Container.java:1202)
at java.awt.Component.dispatchEventImpl(Component.java:2678)
at java.awt.Container.dispatchEventImpl(Container.java:1251)
at java.awt.Component.dispatchEvent(Component.java:2581)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2496)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2261)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2170)
at java.awt.Container.dispatchEventImpl(Container.java:1238)
at java.awt.Window.dispatchEventImpl(Window.java:964)
at java.awt.Component.dispatchEvent(Component.java:2581)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:434)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:141)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:132)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:124)
Die Fälle mit den letzten drei Zeichen meines char[]-Arrays liegen wahrscheinlich daran das er sagt das mein char[]-Array 100 Zeichen beinhaltet, aber wie gesagt, ich habe es schon mehrmals nachgezählt, entweder bin ich zu blöde, oder ich weiß auch nicht. Ich hatte auch mal noch 3 Zeichenketten zu meinen String Array hinzugefügt, allerdings waren dadurch die ganzen Werte verschoben was an und für sich ja nicht so schlimm ist, aber mich wunderts een warum er mir sagt das char[]-Array hat 100 Zeichen.
Bei den Fällen von den Zahlen von 0 - 8 dachte ich zuerst es liegt daran das ich die zu ersetzenden Zeichen durch Zeichenketten von "1" bis "9" nicht "01", "02", "03"... gemacht habe, dann habe ich es allerdings so geändert das jedes Zeichen welches ersetzt wird eine Zeichenfolge mit 2 Zeichen bekommt, aber der Fehler blieb bestehen.
Hier ist die Methode mutate, würde mich freuen wenn ihr mir helfen könnt:
Code:
public void mutate() {
String input, firstpart, secondpart;
int laenge, i, pos, ii;
char symbols[] =
{
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
'w',
'x',
'y',
'z',
'-',
'_',
'.',
',',
':',
'+',
'/',
'\\',
'=',
'?',
'(',
')',
'!',
'<',
'>',
'*',
'#',
'~',
'\'',
'&',
'%',
'$',
'§',
'\"',
'^',
' ',
'°',
'|',
'{',
'}',
'[',
']',
'ß',
'`',
'´',
'²',
'³',
'@' };
String numbers[] =
{
"97",
"96",
"95",
"94",
"93",
"92",
"91",
"90",
"89",
"88",
"87",
"86",
"85",
"84",
"83",
"82",
"81",
"80",
"79",
"78",
"77",
"76",
"75",
"74",
"73",
"72",
"71",
"70",
"69",
"68",
"67",
"66",
"65",
"64",
"63",
"62",
"61",
"60",
"59",
"58",
"57",
"56",
"55",
"54",
"53",
"52",
"51",
"50",
"49",
"48",
"47",
"46",
"45",
"44",
"43",
"42",
"41",
"40",
"39",
"38",
"37",
"36",
"35",
"34",
"33",
"32",
"31",
"30",
"29",
"28",
"27",
"26",
"25",
"24",
"23",
"22",
"21",
"20",
"19",
"18",
"17",
"16",
"15",
"14",
"13",
"12",
"11",
"10",
"09",
"08",
"07",
"06",
"05",
"04",
"03",
"02",
"01"};
input = view.jtf_username.getText();
laenge = input.length();
for (i = 0; i != 98; i++) {
for (ii = 0; ii != laenge;) {
laenge = input.length();
pos = input.indexOf(symbols[i]);
if (pos != -1) {
firstpart = input.substring(0, pos);
if (pos + 1 != laenge) {
secondpart = input.substring(pos + 1, laenge);
} else {
secondpart = "";
}
input = firstpart + numbers[i] + secondpart;
} else {
ii = laenge;
}
}
}
System.out.println(input);
}