我在尝试将角色放在索引

时间:2016-10-04 22:37:37

标签: java indexing caesar-cipher

这是我的代码:

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表上的a - 12.

2 个答案:

答案 0 :(得分:1)

尝试使用char数组:

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 n。使用x,然后递增它。

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

答案 1 :(得分: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();