我有以下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);
,它总是显示数组大小合适..
不知道我的意思是否清楚,如果您需要其他信息,请询问。
谢谢!
答案 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