Java:ArrayIndexOutOfBounds

时间:2014-01-06 21:51:51

标签: java arrays

我有以下Java代码:

public void varsInvullen(String tempTekst){
        int i,aantalVraagtekens = 0;
        String ingevuldeParameter;

        for(i= 0; tempTekst.length() > i; i++){
            if(tempTekst.charAt(i) == '?'){
                aantalVraagtekens++;
                System.out.println(aantalVraagtekens);
                }
            }

        String[] variables1 = new String[aantalVraagtekens+1];
        String[] tempTekst2 = tempTekst.split("\\s+");

        for(i = 0; tempTekst2.length > i; i++){
            if(tempTekst2[i].charAt(0) == '?'){

                variables1[i] = tempTekst2[i];
                if(!variables1[i].equals("null")){
                    System.out.println("Invoer voor parameter: "+variables1[i]+" >>>");
                    ingevuldeParameter = Input.readString();

                    tempTekst = tempTekst.replace(variables1[i],ingevuldeParameter);
                    i++;
                }
            }
        }

        System.out.println("De volledig ingevulde template:");
        System.out.println(tempTekst);
    }

我得到的错误是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
        at Mailmatcher.varsInvullen(Mailmatcher.java:68)
        at Mailmatcher.personaliseren(Mailmatcher.java:90)
        at Mailmatcher.menu(Mailmatcher.java:29)
        at Mailmatcher.main(Mailmatcher.java:131)

我知道这个错误意味着我的数组太小了,但事实并非如此,因为如果我在不同的地方玩System.out.println(variables1.length);,它总是显示数组大小合适..

不知道我的意思是否清楚,如果您需要其他信息,请询问。

谢谢!

2 个答案:

答案 0 :(得分:1)

variables1的长度等于tempTekst + 1中的问号数。tempTekst2是通过在一个或多个空白字符上拆分tempTekst而生成的数组。然后使用tempTekst2的长度进行循环,如果variables1的空格分隔的单词多于问号,则tempTekst的长度可能大于"Do we ? count ? only ? blue ? cars ?"

例如,如果您的输入字符串为variables1,则tempTekst2的长度为6. {"Do", "we", "?", "count", "?", "only", "?", "blue", "?", "cars", "?"}将为tempTekst2当您使用{{{{}}的长度循环时1}}你将循环11次。所以,当你点击第一个问号时,i将等于2.当你点击最后一个问号i将等于10.当你尝试设置variables1[10] =输入任何文本时你会得到例外是因为variables1的大小只有6。

答案 1 :(得分:-2)

你想要for循环中的length() - 1。 Java列表/数组是零索引的,因此长度可能是X,最后一个元素是X-1