为什么我的代码仅比较数组的第一个和最后一个数字-Java

时间:2019-04-04 19:54:33

标签: java arrays random min

我想获得数组的最小数量,但是我的“ if”比较仅检查数组的第一个和最后一个位置。

这是我的代码:

int[] randNumbers = new int[20]; //deklaracja nowej tablicy 20-elementowej

Random r = new Random(); // Dodana metoda random do losowania

for(int i=0; i<randNumbers.length; i++) {
    randNumbers[i] = r.nextInt(101);
    int min = randNumbers[0];

    System.out.println("Number "+i+": " +  randNumbers[i]);


    if (randNumbers[i] < min) {
        min = randNumbers[i];
    }
    if (i == randNumbers.length-1) {
        System.out.println("Min number is: " + min);
    }
}

4 个答案:

答案 0 :(得分:0)

问题在于,循环运行时您没有记住最小数量。如果在循环外创建变量,则不会在每次迭代时都更新该变量。您的代码可能看起来像这样:

int[] randNumbers = new int[20]; //deklaracja nowej tablicy 20-elementowej
Random r = new Random(); // Dodana metoda random do losowania
int min = 0;

for(int i=0; i<randNumbers.length; i++) {
    int number = r.nextInt(101);
    if(i == 0) min = number;
    randNumbers[i] = number;
    System.out.println("Number "+i+": " + number);

    min = Math.min(min, number);
}

System.out.println("Min number is: " + min);

一些注意事项:

  • 变量min已移出循环。这是为了确保它在循环中是持久的,并且不会在循环的每次迭代中都得到更新。
  • 引入了新变量number。这是为了防止您不断调用看起来更好的randNumbers[i],而据我所知,它会稍微加快速度。它还使更改变量变得更容易,并使它在需要的任何地方都有效。
  • 最后一个S.O.P已移出循环。如果可以将语句放在循环结束之后的行中,则检查循环是否在最后一个元素上没有任何意义。它将在功能上相同,但是看起来更好。
  • 它使用if的输出来代替使用Math.min语句来设置min。这只是表面上的更改,其行为与if语句完全相同。

答案 1 :(得分:0)

尝试一下,您的const value = await page.evaluate( () => document.querySelectorAll('table tr td')[1].innerHTML ); 每次都会重置最小值,因此将其移出循环

int min = randNumbers[0];

答案 2 :(得分:0)

您甚至不需要在这里的数组。只需从0迭代到N,然后检查每个随机数是否小于min:

Random r = new Random();
int min = 101;    // assign max value 101 before loop

for(int i = 0; i < 20; i++) {
    int number = r.nextInt(101);
    System.out.println("Number " + i + ": " +  number);
    if (number < min) {
        min = number;
    }
}
System.out.println(min);   

如果要使用数组,可以先进行初始化。例如,使用Random.ints()

int[] randNumbers = new Random().ints(20, 0, 101).toArray();

然后使用与for-loop而不是randNumbers[i]相同的nextInt(101)想法

答案 3 :(得分:0)

  1. 将min int的值设为0的外部循环不起作用,因为我的结果将始终存在,因为未初始化的数组只有'0'
  2. 将其移动100以上是个好主意。当我们知道最大数量时,它就起作用了。
  3. @geneSummons“ int min = Integer.MAX_INT” 这在不同范围/范围的数字上效果很好:)谢谢

顺便说一句。我仍然不明白为什么只比较第一个和最后一个数字;)