我有一项任务是创建一个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]);
}
}
}
答案 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;
}