检查数组中的值不按预期工作

时间:2014-03-15 18:21:31

标签: java arrays swing

我有这个方法:

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++)有问题,但我无法弄清楚是什么。

2 个答案:

答案 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中)设置为数组的长度,因此您不必设置它每次要修改它时手动。你必须避免使用魔术数字