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

问题描述 投票:0回答:4

我想得到我的数组的最小数量,但我的“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);
    }
}
java arrays random min
4个回答
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)


0
投票

试试这个,你的int min = randNumbers[0];每次重置最小值,所以把它移出循环

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

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语句来设置min,而是使用Math.min的输出。这只是一个美化变化,与if语句的行为完全相同。

0
投票
  1. 移动min int外循环,值为0不起作用,因为我的结果将是每次因为Not initialized数组只有'0'
  2. 用100+移动它是个好主意。当我们知道最大数量时,它正在工作。
  3. @geneSummons“int min = Integer.MAX_INT”这对于不同的数字范围/范围非常有效:)谢谢

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

© www.soinside.com 2019 - 2024. All rights reserved.