Java 洋蓟密码程序给我字符串索引超出范围错误

Java 洋蓟密码程序给我字符串索引超出范围错误,java,windows,Java,Windows,我必须做一个java程序(洋蓟密码)好。。。请帮帮我,哈哈 它总是给我一个错误- " java.lang.StringIndexOutOfBoundsException: String index out of range: 11 at java.lang.String.charAt(String.java:686) at ArtichokeCipher.main(ArtichokeCipher.java:29) " 这是实际的朝鲜蓟密码程序。我从用户那里获得

我必须做一个java程序(洋蓟密码)好。。。请帮帮我,哈哈

它总是给我一个错误-

 "
    java.lang.StringIndexOutOfBoundsException: String index out of range: 11
    at java.lang.String.charAt(String.java:686)
    at ArtichokeCipher.main(ArtichokeCipher.java:29)
    "
这是实际的朝鲜蓟密码程序。我从用户那里获得数据文件,然后要求他们提供用于从文本文件中的数据中移动字母的密钥。从那里我把密码钥匙变成了一个字符,用作移位数,但我真的不明白为什么会出现这个错误

//PROGRAM
import java.util.Scanner;
import java.io.*;

public class ArtichokeCipher {
public static void main(String[] args) throws IOException {
    Scanner scan1 = new Scanner (System.in);

    System.out.println("Welcome to Artichoke Cipher!");
    System.out.println("Please name input file to be processed: ");
    String filei = scan1.next();
    Scanner scan = new Scanner (new File (filei));

    System.out.println("Please enter the word to be used as the cipher key: ");
    String shift = scan1.next();
    String lowcase = shift.toLowerCase();


    while (scan.hasNext()) {
    String word = scan.nextLine();
    String answer = "";
    for (int i = 0; i < word.length(); i++)
    {
       char curChar = word.charAt(i);
       char key = lowcase.charAt(i);
       char newChar = (char)(curChar + key);
       if (curChar >= 'A' && curChar <= 'Z'){
           if (newChar > 'Z')
           newChar = (char)(newChar-26);
        }
        else if (curChar >= 'a' && curChar <= 'z') {
            if (newChar > 'z')
            newChar = (char)(newChar - 26);
    }
}
            System.out.println("Encoded: " + answer);
}
}
}
//程序
导入java.util.Scanner;
导入java.io.*;
公共级朝鲜蓟{
公共静态void main(字符串[]args)引发IOException{
扫描仪scan1=新扫描仪(System.in);
System.out.println(“欢迎使用洋蓟密码!”);
System.out.println(“请命名要处理的输入文件:”;
字符串filei=scan1.next();
扫描仪扫描=新扫描仪(新文件(filei));
System.out.println(“请输入要用作密钥的单词:”);
字符串移位=scan1.next();
String lowcase=shift.toLowerCase();
while(scan.hasNext()){
String word=scan.nextLine();
字符串答案=”;
for(int i=0;i='A'&&curChar'Z')
newChar=(char)(newChar-26);
}
else if(curChar>='a'&&curChar'z')
newChar=(char)(newChar-26);
}
}
System.out.println(“编码:+应答);
}
}
}

非常感谢您提供的任何帮助,谢谢

您在这一行中的字符串可能已溢出:

char key = lowcase.charAt(i);

原因是索引
i
word
有效,但可能超出
lowcase
的长度。在这种情况下,当
word
的长度大于
lowcase
时,您可能会出现越界异常

好吧,我修正了密码,但现在我得到了奇怪的屁股字符-请输入文件名输入文件名输入文件待处理:数据名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件待处理:数据名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名输入文件名待处理:数据名输入文件名输入文件名输入文件名输入输入字用作密码密钥:蒙蒂普顿编码编码:蒙蒂顿编码:编码:美国编码:美国各州州州州编码编码:自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自自:sÆƼÁÀ¸Á