我目前正在学习编程1并学习Java。这是我的任务......
要求用户输入一个数字然后循环,找到它们相同且彼此相邻的任何2个数字。然后在循环中显示数字。例如,如果用户输入133455662,则程序显示356.为简单起见,假设用户永远不会输入所有三个相同且相邻的数字
以下是我提出的代码,但我一直收到错误...
public static void main(String[] args){
String num = "";
String result = "";
System.out.println("Enter a number");
Scanner s = new Scanner(System.in);
num = s.next();
int len = num.length();
for(int n = 0;n<len;n++){
char c = num.charAt(n);
char c2 = num.charAt(n+1);
if(c == c2){
result = result + c;
}
}
System.out.println(num);
}
这是我得到的错误......
运行:输入一个数字001123455线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: 9在java.lang.String.charAt(String.java:658)at CS120_Labs.Homework09_C.main(Homework09_C.java:18) C:\ Users \用户弗莱彻\应用程序数据\本地\的NetBeans \缓存\ 8.2 \执行人-片段\ run.xml:53: Java返回:1 BUILD FAILED(总时间:6秒)
再次感谢任何可以提供帮助的人!
答案 0 :(得分:0)
我认为您需要做的就是更改您的for
行(更新为len-1):
for(int n = 0; n<len-1; n++){
...
}
答案 1 :(得分:0)
将for循环更改为
for(int n = 0; n < len - 1; n++)
因为您要查找for-loop正文中索引n
和len+1
处的字符,所以应该从0
循环到len-1
答案 2 :(得分:0)
异常表示StringIndexOutOfBoundsException
,因此您需要进行两项更改才能使其正常工作:
并且在程序结束时,您需要更改&#34; num&#34;到&#34;结果&#34;的System.out.println(的结果强>);
public static void main(String[] args) {
String num = "";
String result = "";
System.out.println("Enter a number");
Scanner s = new Scanner(System.in);
num = s.next();
int len = num.length();
for (int n = 0; n < len - 1; n++) {
char c = num.charAt(n);
char c2 = num.charAt(n + 1);
if (c == c2) {
result = result + c;
}
}
System.out.println(result);
}
答案 3 :(得分:0)
除了这里的其他答案,只是&#34;给&#34;你解决了,我想补充一下:
这是一个常见的问题,当你第一次开始使用&#34; 0&#34;索引。例如,如果我们有字母A-I:
0 1 2 3 4 5 6 7 8
A B C D E F G H I
那里有9个字母,因此length()
将返回9.问题是,第一个位置的字母不是1
,而是0
。如果在一个循环中你一直计算到9,那么循环的charAt
行的最后一次迭代会说&#34;取位置9和#34;但9是out of range
个可用位置,因此异常为String index out of range: 9
。
当您在具有位置索引的结构中引用对象时,可能会发生这种情况。当您看到这样的异常时,首先要检查的是为什么我的代码尝试访问不存在的索引。在这种情况下,答案是for循环的上限。还有其他可能性;例如,你的索引变量(在这种情况下是i
)在循环中被修改,或者如果下限是负的。