2016-10-04 50 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();