我有这个方法:
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++)
出了点问题,但我不知道是什么原因。
发布于 2014-03-16 02:23:44
您将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,您将在消息dialog.As中收到消息Range error,您正在使用return,则不会有任何进一步的循环执行。
发布于 2014-03-16 02:25:13
你的循环
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
)作为数组的长度,这样你就不必每次修改它时都手动设置它。你必须避免魔术数字。
https://stackoverflow.com/questions/22427894
复制相似问题