我为caesar密码编写了代码,但它不起作用...请帮我解决这个问题。
import java.io.IOException;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) throws IOException {
System.out.println("enter the String");
StringBuffer str = new StringBuffer(new Scanner(System.in).nextLine());
System.out.println("encrypting the String . . ." +str);
for(int j=0; j<str.length(); j++){
for(int i=0; i<256; i++) {
if((char)i == str.charAt(j)){
str.setCharAt(j, (char)(i+3));
}
}
}
System.out.println("encrypted String . . .");
}
}
此处您的解决方案正常运行,不再有java.lang.StringIndexOutOfBoundsException 现在又出现了另一个问题。 。 。 。 我尝试了不同的输入,但总是回复相同的答案:??????
答案 0 :(得分:1)
java中的字符串是基于零的。因此,您必须删除第一个循环中的=
:
for(int j=0; j<str.length(); j++){
答案 1 :(得分:1)
使用for(int j=0; j<str.length(); j++) // string index length are 0 based
而不是
for(int j=0; j<=str.length(); j++)
答案 2 :(得分:1)
字符串的字符始终以索引0开头,这意味着如果存储
String str="text";
然后
str.charAt(0) // return "t"
str.charAt(1) // return "e"
str.charAt(2) // return "x"
str.charAt(3) // return "t"
如果你致电str.charAt(4)
它会抛出java.lang.StringIndexOutOfBoundsException,意思是, 您要从中获取数据的索引超出范围。
所以只需按照每个人的建议改变你的for循环。 像这样,
for(int j=0; j<str.length(); j++){
for(int i=0; i<256; i++) {
if((char)i == str.charAt(j)){
str.setCharAt(j, (char)(i+3));
}
}
}
答案 3 :(得分:0)
在j<= str.length() to j< str.length()
中使用for(int j=0; j<str.length(); j++)
作为索引从0开始