[英]Why my code compare only first and last number of array - 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);
}
}
问题是你不记得循环运行时的最小数量。 如果在循环之外创建变量,则每次迭代都不会更新。 您的代码可能如下所示:
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]
,而据我所知,它会略微加快速度。 它还可以更容易地更改变量一次,并使其在需要的任何地方都有效。 SOP
被移到了循环之外。 如果你可以将语句放在循环结束后的行中,那么检查循环是否在最后一个元素是没有意义的。 它的功能相同,但看起来更好。 if
语句来设置min,而是使用Math.min
的输出。 这只是一个外观变化,与if
语句的行为完全相同。 试试这个,你的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迭代到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();
然后使用与randNumbers[i]
相同的for-loop
理念而不是nextInt(101)
顺便说一句。 我仍然不明白为什么它只比较第一个和最后一个数字;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.