2016-05-07 12 views
0

Ich versuche, eine Caesar-Chiffre in Java zu machen, die Sie fragt, welches Wort Sie verschieben möchten und um wieviel. Ich hatte eine außerhalb der Grenzen Ausnahme geworden, aber das fixiert ist, und es ist immer noch nicht funktioniertCaesar Cipher druckt kein endgültiges Array

Hier ist mein Code:

package cipher; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Scanner; 

public class mycipher { 

public static void main(String[] args) { 
    ArrayList<Character> finalpro = new ArrayList<Character>(); 
    ArrayList<Integer> modlet = new ArrayList<Integer>(); 
    Scanner consolereader= new Scanner(System.in); 
    ArrayList<Character> letters = new ArrayList<Character>(); 
    char[] letters2 = {'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'}; 
    for(int i=0; i<letters2.length; i++){ 
     letters.add(letters2[i]); 
    } 
    System.out.println("what word would you like to cipher?"); 
    String original = consolereader.nextLine(); 
    System.out.println("how much would you like to shift it by"); 
    int shift = consolereader.nextInt(); 
    ArrayList<Character> userword = new ArrayList<Character>(); 
    for(int i=0; i<original.length();i++){ 
     userword.add(original.charAt(i)); 
    } 
    for(int i=0; i<userword.size(); i++){ 
     if(userword.get(i)==letters2[i]){ 
      modlet.add(i%shift); 
     } 
    } 
    for(int i=0;i<modlet.size(); i++){ 
     finalpro.add(letters2[modlet.get(i)]); 
    } 
    System.out.println(finalpro); 

} 

} 
+0

Können Sie erklären, was nicht funktioniert. –

+0

Es wird nicht das letzte Wort gedruckt –

Antwort

1

In:

for(int i=0; i<letters.size(); i++){ 
    if(userword.get(i)==letters2[i]){ 
     modlet.add(i%shift); 
    } 
} 

Sie iterieren letters.size(), das größer sein könnte als userword ArrayList. Wenn Sie userword.get (i) ausführen, ist der Index größer als die userword.size(), daher die outOfBoundsException.

sollten Sie versuchen, den ASCII-Code der Zeichen zu ändern (für Kleinbuchstaben):

for(Character charWord : userword){ 
    charWord = (char)(((((int) charWord - 97) + shift)%26) + 97); 
} 

Dies sollte die Zeichen in userword mit den Zeichen verschoben von „Shift“ ersetzen.

97 -> ASCII-Code für "a"

26 -> Anzahl der Buchstaben in Alphabeth.

+0

Ich habe letters.size in userword.size geändert, und es hat aufgehört, den Fehler zu geben, aber es druckt immer noch nicht das verschlüsselte Wort –