有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java索引越界,尽管没有越界?

我正在为学校作业制作一个java程序,你可以在其中添加、移动和移除容器中的东西。我必须使用像“添加100”和“删除50”这样的命令。stop命令“lopeta”只有一个单词,但其他命令有两个部分,command和int。当我使用stop命令时,我会得到索引越界错误,但其他所有命令都有效。我猜这是因为stop命令只有单词,没有int,但是如何防止这种错误发生呢?如果我使用“lopeta 0”就可以了,但我只想使用“lopeta”。抱歉,这些名字是芬兰语的,但我希望你能理解。 这是我的密码

        String luettu = lukija.nextLine();
        String[] osat = luettu.split(" ");
        String komento = osat[0];
        int maara = Integer.valueOf(osat[1]);
        if(luettu.equals("lopeta")) {
                break;
            } 
        if(komento.equals("lisaa")) {
            if(maara < 0) {
                ensimmainen = ensimmainen + 0;
            } else {
                ensimmainen = ensimmainen + maara;
            }
            if(ensimmainen > 100) {
                ensimmainen = 100;
            }
        } else if (komento.equals("siirra")) {
            if(maara < 0) {
                ensimmainen = ensimmainen + 0;
            } if(maara > ensimmainen) {
                ensimmainen = 0;
            } if (toinen + maara > 100) {
                toinen = 100;
            } else {
                ensimmainen = ensimmainen - maara;
                toinen = toinen + maara;
            }
        } else if (komento.equals("poista")) {
            if(maara > toinen) {
                toinen = 0;
            } else {
                toinen = toinen - maara;
            }
        }

共 (1) 个答案

  1. # 1 楼答案

     String[] osat = luettu.split(" ");
     String komento = osat[0];
     int maara = Integer.valueOf(osat[1]);
    

    您正在基于空格(“”)拆分字符串。现在,当有字符串“lopeta 0”时,就得到了数组[“lopeta”,“0”]。当执行osat[1]时,会得到“0”,但当只有字符串“lopeta”且拆分字符串时,生成的数组只有1个元素[“lopeta”]。所以你会得到ArrayIndexoutOfBoundsException,因为没有第二个元素

    您可以在访问元素之前检查数组的大小,或者如果您对异常有想法,可以使用try,catch块来处理