Witam. Otóż mam pewien problem. Program który napisałem jest prostym programem szyfrującym lecz jeżeli kodowanie i dekodowanie jest w jednym programie to dekodowanie wyświetla mi głupoty. Jeśli podziele kodowanie i dekodowanie na dwa programy działają bez zarzutu.
Myślę że problem leży w tym że pamięć nie jest czyszczona po wykonaniu kodowania i dekodowanie pobiera coś z pamięci zarezerwowanej wcześniej i wypisuje głupoty.
Oto kod programu.
String a = JOptionPane.showInputDialog("Wyrażenie do zakodowania.");
String b = JOptionPane.showInputDialog("Na ile wierszy kodujemy?");
String c = "";
char[] d = a.toCharArray();
for(int i=0;(2*i*(Integer.parseInt(b)-1))<a.length();i++){
System.out.print(d[(2*i*(Integer.parseInt(b)-1))]);
c = c+d[(2*i*(Integer.parseInt(b)-1))];
}
for(int o=1;o<Integer.parseInt(b);o++){
for(int i=0;(2*i*(Integer.parseInt(b)-1))<a.length()+Integer.parseInt(b);i++){
if((2*i*(Integer.parseInt(b)-1))<a.length()-1){
if(i==0){
System.out.print(d[(2*i*(Integer.parseInt(b) - 1)) + o]);
c=c+d[(2*i*(Integer.parseInt(b)-1))+o];
}
else{
if(o<Integer.parseInt(b)-1&&((2*i*(Integer.parseInt(b)-1))+o)<a.length()){
System.out.print(d[(2*i*(Integer.parseInt(b)-1))-o]);
c=c+d[(2*i*(Integer.parseInt(b)-1))-o];
System.out.print(d[(2*i*(Integer.parseInt(b)-1))+o]);
c=c+d[(2*i*(Integer.parseInt(b)-1))+o];
}
else if(((2*i*(Integer.parseInt(b)-1))+o)<a.length()){
System.out.print(d[(2*i*(Integer.parseInt(b)-1))+o]);
c=c+d[(2*i*(Integer.parseInt(b)-1))+o];
}
}
}
else{
if((((2*i*(Integer.parseInt(b)-1))-o)<a.length())&&(o<Integer.parseInt(b)-1)){
System.out.print(d[(2*i*(Integer.parseInt(b)-1))-o]);
c=c+d[(2*i*(Integer.parseInt(b)-1))-o];
}
}
}
}
String x = JOptionPane.showInputDialog("Wyrazenie do rozkodowania.");
String y = JOptionPane.showInputDialog("Na ile wierszy rozkodowujemy?");
String z = "";
char[] z1 = x.toCharArray();
char[] z2 = new char[x.length()];
int v=0;
for (int i=0;(2*i*(Integer.parseInt(y)-1))<x.length();i++){
z2[(2*i*(Integer.parseInt(y)-1))]=z1[v];
v++;
}
for(int o=1;o<Integer.parseInt(y);o++){
for(int i=0;(2*i*(Integer.parseInt(y)-1))<x.length()+Integer.parseInt(y);i++){
if((2*i*(Integer.parseInt(y)-1))<x.length()-1){
if(i==0){
z2[(2*i*(Integer.parseInt(y)-1))+o]=z1[v];
v++;
}
else{
if(o<Integer.parseInt(y)-1&&((2*i*(Integer.parseInt(y)-1))+o)<x.length()){
z2[(2*i*(Integer.parseInt(y)-1))-o]=z1[v];
v++;
z2[(2*i*(Integer.parseInt(y)-1))-o]=z1[v];
v++;
}
else if(((2*i*(Integer.parseInt(y)-1))+o)<y.length()){
z2[(2*i*(Integer.parseInt(y)-1))+o]=z1[v];
v++;
}
}
}
else if((((2*i*(Integer.parseInt(y)-1))-o)<x.length())&&(o<Integer.parseInt(y)-1)){
z2[(2*i*(Integer.parseInt(y)-1))-o]=z1[v];
v++;
}
}
}
System.out.println("");
System.out.println(z2);
}
}