Java 为什么我会出现边界外错误?
我一直在线程“main”中遇到异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 5在java.lang.String.charAt(String.java:658)处 hackman.NewClass.startGame(NewClass.java:31)位于 hackman.Decipher.main(Decipher.java:65)Java 为什么我会出现边界外错误?,java,Java,我一直在线程“main”中遇到异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 5在java.lang.String.charAt(String.java:658)处 hackman.NewClass.startGame(NewClass.java:31)位于 hackman.Decipher.main(Decipher.java:65) public新类() { } public char[]startGame() { char[]
public新类()
{
}
public char[]startGame()
{
char[]virusB=新字符[100];
串病毒;
扫描仪扫描=新扫描仪(System.in);
系统输出打印(“输入您的消息”);
virus=scan.nextLine();
对于(int i=0;i您正在检查循环中的索引virusB.length[i]+1
。您的字符数组只有100个字符,此循环将迭代100次,这意味着在循环中的最后一次调用时,它将尝试从0访问不作为数组索引存在的索引100
请尝试virusB.length[i]
您的异常可能是由于以下几行造成的:
virusB[i]= virus.charAt(i);
i
可以是您的virusB
数组的长度,也可以是100个元素。但是用户输入的字符串可能要小得多。假设用户输入11个字符:您的循环可以尝试访问超过该字符串末尾的字符,因此出现异常
特定异常表明导致异常的用户输入的字符串只有4个字符
防止这种情况的一种方法是在循环终止条件中添加一个检查,这样您就不能运行病毒
字符串的末尾,类似于:
for (int i = 0; (i < virusB.length) && (i < virus.length()); i++)
for(inti=0;(i
类似地,i的现有循环终止条件看起来像是字符串virus
不够长:
您需要修复循环条件:
还要考虑virus.length()
限制virusB.length+1
也是错误的
换言之:
for (int i = 0; i < virus.length() && i < virusB.length; i++) {
// ...
}
你的问题就在这里:
virusB[i]= virus.charAt(i);
因为如果您的病毒长度
小于100
它将失败(因为您在virusB
长度之前一直进行for循环)
我建议您将if条件改为病毒长度,而不是数组长度。如下所示:
for(int i=0; i<virus.length; i++)
{
virusB[i]= virus.charAt(i);
}
从您的职位16
到100
您的陈述将失败:
virusB[i]= virus.charAt(i);
因为病毒字符串
没有足够的长度来允许函数字符
正常工作(它将尝试访问字符串
不存在的位置)
我希望它会对你有帮助!I
一个灾难的配方。说真的。你应该问问自己,为什么这不会导致索引越界问题。你需要检查病毒的长度。你的循环对于数组来说也太长(1)。你为什么要将字符串复制到char[]
不管怎样?我所看到的只是一大堆努力试图解决这个问题,I
循环太长(1)你说得对,合并我们的答案,这将是完全正确的!@Alex和Thilo你说得对,但问题的这一部分在我提到之前就被删掉了that@pb2q我讨厌这种情况发生。对不起,我只是把它放在他们的文件中,看看它是否能修复它,但它不适用于只有virusB.length@alexThere还有String#toCharArray
@Thilo是的,这也可能是另一种选择。但是去罗马有很多方法;)只是我这么做是为了不改变OP的逻辑。当然。当人们解释为什么他们首先需要去罗马时,这总是有帮助的。
public char[] startGame() {
System.out.print("Enter your message");
return new Scanner(System.in).nextLine().toCharArray();
}
virusB[i]= virus.charAt(i);
for(int i=0; i<virus.length; i++)
{
virusB[i]= virus.charAt(i);
}
String prove = "This is a prove";
virusB[i]= virus.charAt(i);