2016-10-04 52 views
0

在獲得該字符這是我的代碼:我有麻煩試圖索引

package ch3; 

import java.util.Scanner; 

public class caesarCypher { 

    static String inp; 

    public static void main(String[] args) { 
     int input; 
     int x = 0; 
     Scanner scan = new Scanner(System.in); 
     inp = scan.nextLine(); 

     input = inp.length(); 
     System.out.println(input + inp); 
     while (x < input) { 
      x += 1; 
      inp = ((inp.charAt(x)) - 12); 
     } 
    } 
} 

我怎麼會去的inp指數設定爲x?換句話說,我試圖減去字符,例如ASCII表上的一個 - 12。

+0

的【JAVA凱撒密碼的代碼(http://stackoverflow.com/questions/35242376/java-caesar-cipher-code) –

回答

1

嘗試使用字符數組:

public class caesarCypher { 

    static String inp; 

    public static void main(String[] args) { 
     int input; 
     Scanner scan = new Scanner(System.in); 
     inp = scan.nextLine(); 
     char[] inpArr = inp.toCharArray(); 

     input = inp.length(); 
     System.out.println(input + inp); 
     for(int i = 0; i < input; i++) 
     { 
      inpArr[i] -= 12; 
     } 

     inp = new String(inpArr); 
    } 
} 

作爲一個側面說明,你會從下面的代碼得到一個IndexOutOfBoundsExceptioñ。使用x,然後增加它。

while (x < input) { 
    x += 1; 
    inp = ((inp.charAt(x)) - 12); 
} 
+0

可能的複製謝謝這工作,我感謝幫助。 – dirtydan

1

據我瞭解你的目標,你想在一個字符串讀取,然後轉向它的字符的ASCII表?

char是一個16位無符號數,這是一個int衍生物,這就是它被解釋爲int的原因。

,但你要一個int分配回你inp字符串:

INP =((inp.charAt(X)) - 12);

當然這不成功。

因爲字符串在java中是不可變的,所以你必須每次創建一個新的字符串。

您可以使用Character.toString(char c)從ascii表中的int值中獲取實際的char。這將設置12的偏移您輸入的字符串

int offset = 12; 
    Scanner scan = new Scanner(System.in); 
    inp = scan.nextLine(); 
    String shifted =""; 
    for (int i = 0; i < inp.length(); i++) { 
     char c = (char)((inp.charAt(i)) - offset); 
     shifted+= Character.toString(c); 
    } 
    System.out.println(shifted); 
    scan.close();