运行此代码时出现错误

时间:2018-03-29 17:56:42

标签: java

我目前正在学习编程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秒)

再次感谢任何可以提供帮助的人!

4 个答案:

答案 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正文中索引nlen+1处的字符,所以应该从0循环到len-1

答案 2 :(得分:0)

异常表示StringIndexOutOfBoundsException,因此您需要进行两项更改才能使其正常工作:

  1. 添加&#34; -1&#34;修正错误&#34; for(int n = 0; n&lt; len - 1 ; n ++){&#34;
  2. 并且在程序结束时,您需要更改&#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)在循环中被修改,或者如果下限是负的。