Java I';我很难在索引中找到字符

Java I';我很难在索引中找到字符,java,indexing,caesar-cipher,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

这是我的代码:

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);
        }   
    }
}
包装ch3;
导入java.util.Scanner;
公务舱{
静态串inp;
公共静态void main(字符串[]args){
int输入;
int x=0;
扫描仪扫描=新扫描仪(System.in);
inp=scan.nextLine();
输入=输入长度();
系统输出打印项次(输入+输入);
while(x

如何将
inp
的索引设置为x?换言之,我尝试减去字符,例如ASCII表上的-12。

尝试使用字符数组:

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);
    }
}

尝试使用字符数组:

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);
    }
}

据我所知,您的目标是读取字符串,然后在ascii表中移动其字符

char是一个16位无符号数,有点像int派生,这就是为什么它被解释为int

但您正试图将int赋值回
inp
字符串:

inp=((inp.charAt(x))-12)

这当然失败了

因为字符串在java中是不可变的,所以每次都必须创建一个新字符串

您可以使用
Character.toString(char c)
从ascii表中的int值获取实际字符。这将为输入字符串设置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();
int offset=12;
扫描仪扫描=新扫描仪(System.in);
inp=scan.nextLine();
字符串移位=”;
对于(int i=0;i
据我所知,您的目标是读取字符串,然后在ascii表中移动其字符

char是一个16位无符号数,有点像int派生,这就是为什么它被解释为int

但您正试图将int赋值回
inp
字符串:

inp=((inp.charAt(x))-12)

这当然失败了

因为字符串在java中是不可变的,所以每次都必须创建一个新字符串

您可以使用
Character.toString(char c)
从ascii表中的int值获取实际字符。这将为输入字符串设置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();
int offset=12;
扫描仪扫描=新扫描仪(System.in);
inp=scan.nextLine();
字符串移位=”;
对于(int i=0;i