我正在使用基本的密码和用户ID系统进行编码,但似乎无法弄清楚这个索引问题。我知道数组的索引为0,在我的代码中,我正在经历一个while循环(我尝试了for循环,但遇到了同样的问题),使用输入的针检查数组的第i个位置。无论出于什么原因,我都会收到此错误:
Process: com.example.gabeskillerpcjr.assemblylineapp, PID: 17838 java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
at com.example.gabeskillerpcjr.assemblylineapp.FourDtForm.exportVarifaction(FourDtForm.java:350)
at com.example.gabeskillerpcjr.assemblylineapp.FourDtForm$3.onClick(FourDtForm.java:264)
这是我简单的while循环,int我初始化为0:
public void exportVarifaction(){
String[] PinsNums = new String[]{"1415","1678","1923"};
String[] PinNames = new String[]{"admin","test","test1"};
String tmp;
boolean done = false;
while (!done) {
tmp = PinsNums[i];
if (tmp.equals(keyPadNumsEntered)) {
result = PinNames[i];
loggedOn = true;
done = true;
} else {
++i;
result = "no logon";
}
}
}
答案 0 :(得分:1)
遍历整个数组后,您缺少停止循环的条件。例如:
while (!done) {
tmp = PinsNums[i];
if (tmp.equals(keyPadNumsEntered)) {
result = PinNames[i];
loggedOn = true;
done = true;
} else {
++i;
result = "no logon";
}
if (i == PinsNums.length) {
done = true;
}
}
答案 1 :(得分:1)
您正在使用的while循环和完成的布尔值都是完全不必要的。您正在收到此异常,因为如果'tmp'永远不等于'keyPadNumsEntered'会怎样?它将继续进行迭代,从而导致IndexOutOfBoundsException。作为for循环,它将更具可读性,并且应防止出现异常:
public void exportVarifaction(){
String[] PinsNums = new String[]{"1415","1678","1923"};
String[] PinNames = new String[]{"admin","test","test1"};
String tmp;
for (int i = 0; i < PinsNums.length; i++) {
tmp = PinsNums[i];
if (tmp.equals(keyPadNumsEntered)) {
result = PinNames[i];
loggedOn = true;
break;
}
}
if (!loggedOn) {
result = "no logon";
}
}
答案 2 :(得分:0)
您需要通过检查变量i和数组的长度来检查数组上的循环是否完成。
while (!done && i<PinsNums.length) {
tmp = PinsNums[i];
if (tmp.equals(keyPadNumsEntered)) {
result = PinNames[i];
loggedOn = true;
done = true;
} else {
++i;
result = "no logon";
}
}
答案 3 :(得分:0)
您的while循环如果没有收到阵列中的引脚,则不会终止。
仅追踪tmp = "9999"
会发生什么情况?和i = 2
?您的while
循环将第三次迭代,导致索引超出范围。我宁愿使用for循环:
for(int i = 0; i < pinsNum.length; i++) {
//Do work here
}
这样,您可以在for循环内使用if语句来切换loggedon
,然后在for循环外再次检查它:
if(loggedon) {
//Something happens
}
else {
//Something also happens
}
答案 4 :(得分:0)
其他答案是正确的,因为您没有适当的退出条件。尽管for循环会更合适。
String result = "no logon";
for (String tmp : PinNums) {
if (tmp.equals(keyPadNumsEntered) {
result = tmp;
loggedOn = true;
}
}
一个简单的contains
可能会更好。
if (Arrays.asList(PinNums).contains(keyPadNumsEntered)) {
result = keyPadNumsEntered;
loggedOn = true;
}