Java 将嵌套的for循环生成单个for循环
我的任务是创建一个10-100之间的随机数数组。 然后我需要找出数组中没有列出的所有数字。 我使用嵌套for循环进行赋值,以交叉引用数组,然后将数组中找到的所有数字改为-1。最后,我打印出数组中不是-1的元素。 我的教授告诉我,我是否可以只使用一个for循环来完成这个作业,而不需要执行嵌套的for循环。让电脑运行10000次而不是100次。 可能吗?如果是,怎么做 多谢各位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;
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的数字对其进行索引,可以保证数组索引异常。最简单的修复方法:makeba[]=new boolean[100]
。奖金:它会自动计算0-9。
for (int j = 1; j < 100; j++) {
fullArray[randomArray[j]] = -1;
}