hallo!
mein programm soll eine zeichenkette (CHAR-array) einlesen und diese reduzieren. also zb statt "hallo du!!!" soll er "hal2o du!3" hinschreiben. es würde ja auch fast funktionieren, aber ich hab noch 2 probleme. erstens betritt er mir die äußerste for-schleife nur einmal. ich hab keine ahnung, warum er das tut. und zweitens bekomm ich immer die fehlermeldung
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Reduktion3.reduce(Reduktion3.java:97)
at Reduktion3.main(Reduktion3.java:20)
Kann sich vielleicht mal wer den code durchschauen und mir vielleicht einen rat geben?
DANKE!
(aja, einlesen und ausgabe funktioniert wie's soll!)
mein programm soll eine zeichenkette (CHAR-array) einlesen und diese reduzieren. also zb statt "hallo du!!!" soll er "hal2o du!3" hinschreiben. es würde ja auch fast funktionieren, aber ich hab noch 2 probleme. erstens betritt er mir die äußerste for-schleife nur einmal. ich hab keine ahnung, warum er das tut. und zweitens bekomm ich immer die fehlermeldung
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Reduktion3.reduce(Reduktion3.java:97)
at Reduktion3.main(Reduktion3.java:20)
Kann sich vielleicht mal wer den code durchschauen und mir vielleicht einen rat geben?
DANKE!
(aja, einlesen und ausgabe funktioniert wie's soll!)
Code:
public class Reduktion3 {
/**
* Main function.
*
* @param args Program arguments (ignored)
*/
public static void main(String[] args) {
char restart;
char[] zeichen;
Out.println("Reduktion einer Zeichenkette");
Out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
Out.println();
do {
zeichen = readLetters();
zeichen = reduce(zeichen);
writeReduction(zeichen);
Out.println();
Out.println("Wollen Sie eine weiter Zeichenkette reduzieren? (ja=j, nein=n)");
int q = In.readInt();
restart = In.read(); //Variable restart speichert j bzw. n
Out.println();
Out.println("*******************************************************");
Out.println();
Out.println();
}
while (restart=='j'); //solange restart==j wird Programm wiederholt
}
/**
* Reads letters from the input stream.
*
* @return All letters represented as char-array.
*/
static char[] readLetters() {
char[] zeichen;
int max;
int i;
Out.println("Wieviele Zeichen wird Ihre (ziffernlose) Zeichenkette haben?");
max = In.readInt();
zeichen = new char[max];
Out.println();
Out.println("Geben Sie die Zeichenkette ein!");
int o = In.readInt();
for (i=0; i<zeichen.length; i++) {
zeichen[i]=In.read();
}
return zeichen;
}
/**
* Reduces char-array.
*
* @return The reduced char-array.
*/
static char[] reduce (char[] s) {
int i;
int j;
int k;
char counter = '2';
for (i=0; i<s.length; i+=counter) {
for (j=i+1; j<s.length; j++) {
if (s[i]==s[i+j]) {
counter++;
s[i+1]=counter;
int x=i+2;
while (s[x]==s[i]) {
for (int y=x+1; y<s.length; y++) {
s[x]=s[y];
x++;
}
}
}
/*k = j-i-2;
char[] hilf = new char[s.length-k];
for (i=0; i<hilf.length; i++) {
hilf[i]=s[i];
}
s=hilf;*/ //sobald ich dieses codestück hinschreibe, kommt die oben geschriebene fehlermeldung!! warum???
}
} //diese schleife betritt er nicht nocheinmal, obwohl i<s.length ist
return s;
}
/**
* Writes the reduced letters.
*
* @param The array to write to the output stream.
*/
static void writeReduction (char[] s) {
Out.println("Ihre reduzierte Zeichenkette:");
for (int x=0; x<s.length; x++) {
Out.print(s[x]);
}
}
}