我有这个方法:
void isInteger() {
int nums[] = new int[6];
try {
nums[0] = Integer.parseInt(jFormattedTextField1.getText());
nums[1] = Integer.parseInt(jFormattedTextField2.getText());
nums[2] = Integer.parseInt(jFormattedTextField3.getText());
nums[3] = Integer.parseInt(jFormattedTextField4.getText());
nums[4] = Integer.parseInt(jFormattedTextField5.getText());
nums[5] = Integer.parseInt(jFormattedTextField6.getText());
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "Invalid format or no input error" + e);
return;
}
for (int i = 0; i < 5; i++) {
if (nums[i] == nums[i + 1]) {
JOptionPane.showMessageDialog(null, "Repeated number error");
return;
}
if (nums[i] < 1 || nums[i] > 48) {
//out of number range tell user of error
JOptionPane.showMessageDialog(null, "Range error");
return;
}
}
}
前5个数字正在工作,如果我在除jFormattedTextField6之外的任何文本字段中输入的数字高于48,那么它会给我异常。
我想for(int i=0; i<5; i++)
有问题,但我无法弄清楚是什么。
答案 0 :(得分:1)
您正在迭代for循环5次,如下所示:
for(int i=0; i<5; i++) //Size of array is 6 but iterating only 5 times
当您在5个文本字段中输入超过48的值时,
if (nums[i] < 1 || nums[i] > 48)
此语句变为true,您将在消息对话框中收到消息范围错误。当您使用return时,将不会再执行循环。
答案 1 :(得分:1)
你的循环
for (int i = 0; i < 5; i++)
是正确的,因为您使用的是nums[i + 1]
。但你必须分别处理最后一个案例:
int len = nums.length();
// This will loop in the range [0, len-2], in other words
// from the first index to the one before the last
for (int i = 0; i < len - 1; i++) {
// ...
}
// Handle the last element of array
if (nums[len-1] < 1 || nums[len-1] > 48) {
// ...
}
注意:我建议您将变量(在上面的示例len
中)设置为数组的长度,因此您不必设置它每次要修改它时手动。你必须避免使用魔术数字。