将嵌套for循环转换为单个for循环

时间:2016-02-04 20:05:28

标签: java for-loop nested-loops

我有一项任务是创建一个10-100的随机数组。 然后我需要输出数组中未列出的所有数字。 我使用嵌套for循环完成赋值,交叉引用数组,然后我将数组中找到的所有数字更改为-1。最后,我打印出数组中不是-1的元素。 我的教授告诉我,我可以只用一个for循环来完成这个赋值,而且不需要做一个嵌套的for循环。并使计算机运行10,000次而不是100次。 那可能吗?如果是这样的话?

谢谢。

    package assignment.pkg1;

    import java.util.Random;
    public class Assignment1 {

       static Random ran = new Random();

        public static void main(String[] args) {

            int[] arr = new int[100];

            for (int i = 0; i < 100; i++) {
                arr[i] = (ran.nextInt(90)) + 10;
            }

            InversingArray(arr);


        }

        public static void InversingArray(int[] randomArray) {

            int[] fullArray = new int[100];

           for (int i = 0; i < 100; i++) {
                fullArray[i] = i;
            }

            for (int i = 0; i < 100; i++) {
                for (int j = 1; j < 100; j++) {

                    if (randomArray[j] == fullArray[i]) {
                        fullArray[i] = -1;

                    }
                }
           }
            System.out.println("These numbers are not in randomArray: ");
             for (int i = 0; i < 100; i++) {
                if (fullArray[i] != -1) {
                    System.out.println(fullArray[i]);
                }

            }
        }

2 个答案:

答案 0 :(得分:1)

在代码中,您可以创建一个数组来保存可能的值。如果你考虑一下,数组索引将始终等于存储在数组中的数字。

... residRanges[i] = fitResid( residRanges[i], colAList, colBList ); residRanges[i].n = count; ...

这是多余的。

要求您做的是确定使用了哪些数字:布尔测试。这意味着你应该有一个最初为false的布尔数组(java中的布尔值的默认值),当一个相等的整数被翻转为真时,它会被翻转为真。

这样的东西
fullArray[i] = i;

请注意(可能是练习的重点)您使用的数组[0..90]代表数字[10..100]。

答案 1 :(得分:0)

嵌套循环目前如下所示:

for (int i = 0; i < 100; i++) {
    for (int j = 1; j < 100; j++) {
        if (randomArray[j] == fullArray[i]) {
            fullArray[i] = -1;
        }
    }
}

但我们知道, fullArray[i]始终与i 相同。

所以你可以把它重写为:

for (int j = 1; j < 100; j++) {
    int i = randomArray[j];
    fullArray[i] = -1;
}

甚至更短:

for (int j = 1; j < 100; j++) {
    fullArray[randomArray[j]] = -1;
}