2016-05-07 17 views
0

我想在Java中做一個凱撒密碼,它會詢問你要轉換什麼字以及多少。我已經得到了一個出界異常,但是是固定的,但它仍然是不工作凱撒密碼不打印最終陣列

這裏是我的代碼:

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

你能解釋什麼是不工作。 –

+0

它不會打印出最後一個字 –

回答

1

在:

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

你迭代letters.size(),它可能比userword ArrayList大。當您執行userword.get(i)時,索引將大於userwordize(),因此是outOfBoundsException。

你應該嘗試改變字符的ASCII碼(小寫字母):

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

這應該與「移動」移動中的字符替換userword的字符。

97 - >數目的在alphabeth字母 - 對於 「一」

26> ASCII碼。

+0

我已將letters.size更改爲userword.size,並且它已停止提供該錯誤,但仍未打印加密的字 –