首先,这是一个学校班级。 这是我的计划:
import java.util.*;
public class Exitearly1 {
public static void main(String[] args) {
Scanner kbinput = new Scanner(System.in);
System.out.println("Please input your name: ");
String name = kbinput.next();
int count = 0;
while (count < name.length()) {
count++;
int res = name.charAt(count);
if ((res == 'a') || (res == 'A'))
continue;
System.out.println(name.charAt(count));
}
System.out.println("Name with no A's");
}
}
它打印我正在输入的内容(Andrea)没有像它想象的那样,但是在这样做之后而不是打印出最后一行它在输出中给出了这个:
n
d
r
e
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:686)
at Exitearly1.main(Exitearly1.java:13)
我尝试了许多不同的方法来修复它,没有改变它,我来到这里因为我问我的老师如何解决它,她只告诉我我已经知道它有什么问题。
答案 0 :(得分:2)
你从位置 1 迭代到位置 name.length(),所以你超出了范围(因为stringvar.charAt(stringvar.length( ))总是导致超出范围的异常。
奥廖尔的解决方案可能会以无限循环结束。你应该这样做:
while (count < name.length())
{
int res = name.charAt(count);
if (( res !='a')&&(res !='A')) {
System.out.println(name.charAt(count));
}
count++;
}
请注意,您的代码永远不会显示字符串的第一个位置,而与“A”或其他任何内容无关。
答案 1 :(得分:1)
虽然其他人指出了你的错误(你在用它来读取它所描述的位置之前增加了计数器)我建议使用增强的for循环(它可以迭代数组,或实现{{1的类的实例接口),类似
Iterable