Java 将嵌套的for循环生成单个for循环

Java 将嵌套的for循环生成单个for循环,java,for-loop,nested-loops,Java,For Loop,Nested Loops,我的任务是创建一个10-100之间的随机数数组。 然后我需要找出数组中没有列出的所有数字。 我使用嵌套for循环进行赋值,以交叉引用数组,然后将数组中找到的所有数字改为-1。最后,我打印出数组中不是-1的元素。 我的教授告诉我,我是否可以只使用一个for循环来完成这个作业,而不需要执行嵌套的for循环。让电脑运行10000次而不是100次。 可能吗?如果是,怎么做 多谢各位 package assignment.pkg1; import java.util.Random;

我的任务是创建一个10-100之间的随机数数组。 然后我需要找出数组中没有列出的所有数字。 我使用嵌套for循环进行赋值,以交叉引用数组,然后将数组中找到的所有数字改为-1。最后,我打印出数组中不是-1的元素。 我的教授告诉我,我是否可以只使用一个for循环来完成这个作业,而不需要执行嵌套的for循环。让电脑运行10000次而不是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]);
                }

            }
        }
package assignment.pkg1;
导入java.util.Random;
公共课堂作业1{
静态随机运行=新随机();
公共静态void main(字符串[]args){
int[]arr=新int[100];
对于(int i=0;i<100;i++){
arr[i]=(ran.nextInt(90))+10;
}
反向阵列(arr);
}
公共静态无效反转阵列(int[]随机阵列){
int[]fullArray=新的int[100];
对于(int i=0;i<100;i++){
全数组[i]=i;
}
对于(int i=0;i<100;i++){
对于(int j=1;j<100;j++){
if(randomArray[j]==fullArray[i]){
全数组[i]=-1;
}
}
}
System.out.println(“这些数字不在随机数组中:”);
对于(int i=0;i<100;i++){
if(全数组[i]!=-1){
System.out.println(fullArray[i]);
}
}
}

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

fullArray[i]=i;

这是多余的

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

差不多

int[] arr = new int[100];

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

// ba starts with all false values 
boolean ba[] == new boolean[90];  // note that the instructor said 10-100
for(int i=0; i<90; i++) {
  ba[arr[i]] = true;
  // lets assume arr[0] == 45
  // ba[arr[0]] is the same as ba[45]
  // ba[45] = true;  will set that bucket of the boolean array to true 
}

System.out.println("These numbers are not in randomArray: ");
for (int k = 0; k < 10; k++) {
    System.out.println(k);
}
for (int j = 0; j < 90; j++) {
    if (!ba[j]) { // shorthand for ba[j]==false
        System.out.println(j+10); // The array starts at a base of 10
    }
}
int[]arr=newint[100];
对于(int i=0;i<100;i++){
arr[i]=(ran.nextInt(90))+10;
}
//ba以所有假值开始
boolean ba[]==new boolean[90];//注意讲师说的是10-100

对于(int i=0;i,嵌套循环当前如下所示:

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

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

但是如何摆脱嵌套for循环呢?我是否仍然需要交叉引用每个ba[I]和每个randomArray[I]不,通过数组为每个项目设置相应的布尔值。我会在其中添加一些注释,这应该会有所帮助。好的,非常感谢,他还希望我们打印出数组中0-100之间的所有值,因此0-9显然包括在内,这具体取决于您的指导老师。作为另一个问题发布,其他人应该能够提供帮助。使用0-89之间的数组索引,但使用值为10-99的数字对其进行索引,可以保证数组索引异常。最简单的修复方法:make
ba[]=new boolean[100]
。奖金:它会自动计算0-9。
for (int j = 1; j < 100; j++) {
    fullArray[randomArray[j]] = -1;
}