我一直在线程“main”
中得到一个异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 5在java.lang.String.charAt(String.java:658)at hackman.NewClass.startGame(NewClass.java:31)at hackman.Decipher.main(Decipher.java:65)
public NewClass()
{
}
public char[] startGame()
{
char[] virusB = new char[100];
String virus;
Scanner scan = new Scanner(System.in);
System.out.print("Enter your message");
virus = scan.nextLine();
for(int i=0; i<virusB.length+1; i++)
{
virusB[i]= virus.charAt(i);
}
virusA = virusB;
return virusA;
}
答案 0 :(得分:2)
看起来字符串virus
不够长:
char[] virusB = new char[100]; String virus = scan.nextLine(); for(int i=0; i<virusB.length+1; i++) { virusB[i]= virus.charAt(i);
你迭代到virusB
的结尾+ 1,其长度为100,
根据您的错误消息判断,virus
的长度为5。
例如,如果scan.nextLine()
返回&#34; hello&#34;,这将在循环中发生:
virusB[0] = virus.charAt(0); // 'h'
virusB[1] = virus.charAt(1); // 'e'
virusB[2] = virus.charAt(2); // 'l'
virusB[3] = virus.charAt(3); // 'l'
virusB[4] = virus.charAt(4); // 'o'
virusB[5] = virus.charAt(5); // -> boom
// ...
您需要修复循环条件:
virus.length()
virusB.length + 1
也是错误的换句话说:
for (int i = 0; i < virus.length() && i < virusB.length; i++) {
// ...
}
但最好的可能是简化整个事情:
public char[] startGame() {
System.out.print("Enter your message");
return new Scanner(System.in).nextLine().toCharArray();
}
答案 1 :(得分:1)
你的例外可能是由于这一行:
virusB[i]= virus.charAt(i);
i
可以达到virusB
数组或100个元素的长度。但是用户输入的字符串可能比这小得多。假设用户输入11个字符:您的循环可能会尝试访问该字符串末尾的字符,因此您的异常
特定的例外情况表明,导致异常的用户输入的字符串只有4个字符。
防止这种情况的一种方法是在循环终止条件中添加一个检查,这样就不会在virus
字符串的末尾运行,例如:
for (int i = 0; (i < virusB.length) && (i < virus.length()); i++)
同样,i<virusB.length+1
的现有循环终止条件也可能导致异常。数组是零索引,因此访问索引virusB.length
的元素也不合格。
答案 2 :(得分:1)
你遇到的问题是:
virusB[i]= virus.charAt(i);
因为如果virus length
小于100
它会失败(因为你的for循环直到virusB
长度)。
我建议您将if条件更改为病毒而不是数组。像这样:
for(int i=0; i<virus.length; i++)
{
virusB[i]= virus.charAt(i);
}
使用此方法,您将避免病毒的长度低于阵列的长度。
编辑:我之前的解释是什么意思,当您尝试访问不存在的String
的位置时,它永远都会崩溃。例如,如果您有以下String
:
String prove = "This is a prove";
从你的位置16
到100
,你的陈述中会失败:
virusB[i]= virus.charAt(i);
因为virus String
没有足够的长度来允许函数charAt
正常工作(它会尝试访问String
的位置,而不是account day type
a 1 X
b 1 Y
c 1 Z
a 2 Y
b 2 Z
c 3 Z
。 t存在)。
我希望它会对你有所帮助!
答案 3 :(得分:0)
您正在检查循环中的索引virusB.length[i]+1
。你的char数组只有100个字符,这个循环将迭代100次,这意味着在循环的最后一次调用中,它将尝试访问索引100,该索引100不存在,因为数组从0开始索引。
试试virusB.length[i]