我需要从未排序的数组中获取最小的未使用数。我无法对数组进行排序,因为这只是一个测试程序,在实际程序中,我将从对象数组中获取值。
因此,在尝试获取最小的未使用号码时,我设法获得了未使用号码的列表。这对于我在程序中编写的第一个随机数来说是完美的,但是第二次,输出错误。
这是我试过的代码
class smallestUnusedNumberTest {
public static void main(String args[]) {
int[] testArray = {1, 5, 7, 11, 4, 8};
int largest = 1;
int i;
for(i = 0; i < testArray.length; i++) {
if(testArray[i] > largest) {
largest = testArray[i];
}
}
for(i = 1; i < largest; i++) {
for(int j = 0; j < testArray.length; j++) {
if(i == testArray[j]) {
i++;
}
}
System.out.println(i);
}
}
}
我得到的输出是
2
3
5
6
9
10
我得到 5,它已经存在于数组中。
我使用 for
循环从数组中获取最大的数字。但是,我无法找出正确的逻辑。
我应该怎么做才能从数组中获取正确的未使用数字?我需要按升序排列的输出。
最佳答案
您的算法逻辑存在问题:当您找到匹配时在内循环中递增 i
,但您继续循环。因此,当您在 5
之后找到 4
时,您将 i
从 4
递增到 5
,但您永远不会回到数组的开头,看看是否有一些较早的元素是 5
。
要解决此问题,请在外层循环中定义一个 boolean
变量,最初将其设置为 false
,然后在中将其设置为 true
当你找到 i == testArray[j]
时的内部循环;找到匹配项时跳出循环。
在内部循环之后检查您的 boolean 变量。如果它是 true
,那么数字就在那里,所以你不应该打印任何东西。否则,打印数字。
关于java - 从java中的未排序数组中获取未使用数字的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29632172/