2d阵列循环计数无法正常工作

时间:2016-09-09 17:38:41

标签: java arrays

所以这很接近完成,这是 Output。我的方法工作得很好,所以这不是问题。输出将给出最好的解释,但基本上我必须打印4096个随机整数列表并询问用户输入的数字。有了这个数字,我必须告诉用户找到它需要多少循环。问题在于它没有正确计算。它会跳过输出中的数字,如果找不到,则会打印两个if语句。我已经为1d数组构建了这个程序,我无法使用Arraylist。谢谢!

Scannner s = new Scanner(System.in);

    int[][] input = new int[5][1];
    int[][] arrayone = new int[4097][1];
    int loop = 0;

for (int id = 0; id < input.length; id++) {
    for (int x = 0; x <input[id].length; x++) {
        System.out.println("Please enter a number between " + min + " and " + max);
        input[id][x] = s.nextInt();

        if (min <= input[id][x] && input[id][x] <= max) {
            for (int count = 0; count < arrayone.length; count++) {
                for (int count2 = 0; count2 < arrayone[count].length; count2++) {
                    if (arrayone[count][count2] != input[id][x]) {
                        loop++;
                    }
                    else {
                        break;
                    }
                }
            }
        if (input[id][x] != arrayone.length){
            System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
        }
        if(loop > 4096) {
            System.out.println(input[id][x] + " was not found");
        }
        loop = 0;
    }
}

更新

我已经使用下面的部分代码来更新我自己的代码,现在找不到打印件或4096,这里是Updated Output。以下是我根据建议对代码所做的更改:

if(loop > 4096) {
        System.out.println(input[id][x] + " was not found");
        }
        else{
        System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
        }
        loop = 0;

3 个答案:

答案 0 :(得分:0)

正如评论中所提到的,您的代码有一些需要解决的奇怪问题,尤其是维度。这掩盖了这样一个事实:你没有突破外部循环以使用break语句结束搜索过程,因为一个未标记的中断只会突破最内层的循环。假设您创建的2D数组具有多个维度,则可以使用标签来突破外部循环。

outerloop:
for (int count = 0; count < arrayone.length; count++) {
    for (int count2 = 0; count2 < arrayone[count].length; count2++) {
        loop++;    //assume first check counts as one loop
        if (arrayone[count][count2] == input[id][x]) {
            break outerloop;
        }
    }
}

对于您的第二个问题,您可能需要更正数字,因为您修复了程序代码中的奇怪之处,但由于您的程序只有两个结果(找到或找不到数字),您可以使用简单的if / else语句,每次搜索只写一个输出对话。

    if(loop > 4096) {
        System.out.println(input[id][x] + " was not found");
    }
    else{
        System.out.println("It took " + loop + " time(s) to find the number " + input[id][x]);
    }

答案 1 :(得分:0)

首先,您似乎错过了for for for循环的结束括号。

其次,问题是break;仅突破内循环,因此外循环仍将继续。修复此问题的一种方法是在两个循环外部使用布尔标志,并在想要中断时将其设置为true,这样外部循环就可以知道它现在应该突破。

答案 2 :(得分:0)

非常感谢你们!我搞定了!我就这样做了:

boolean foundit = false;         
   // if (min <= input[id][x] && input[id][x] <= max) {
        for (int count = 0; count < arrayone.length && !foundit; count++) {
            for (int count2 = 0; count2 < arrayone[count].length; count2++) {                 
            if (arrayone[count][count2] == input[id][x]) {
                foundit = true;
                break;
            }
            else {
                loop++;
            }
            }
        }