首页 > 解决方案 > 为什么我的代码只比较数组的第一个和最后一个数字 - Java

问题描述

我想获得数组的最小数量,但我的“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);
    }
}

标签: javaarraysrandommin

解决方案


问题是您不记得循环运行时的最小数量。如果你在循环之外创建一个变量,它不会在每次迭代中更新。您的代码可能如下所示:

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语句来设置 min,而是使用Math.min. if这只是表面上的改变,与语句的行为完全相同。

推荐阅读