为什么我的代码只比较数组的第一个和最后一个数字 - Java
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]
,它看起来更好,而且据我所知稍微加快了速度。它还可以更轻松地更改变量一次,并使其在需要的任何地方都有效。
- 最后一个
S.O.P
被移出循环。如果您可以将语句放在循环结束后的那一行,那么检查循环是否在最后一个元素是没有意义的。它的功能相同,但看起来更好。
- 它没有使用
if
语句来设置最小值,而是使用 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();
然后使用相同的 for-loop
想法 randNumbers[i]
而不是 nextInt(101)
- 将值 0 的 min int 移动到外部循环不起作用,因为我的结果每次都是因为未初始化的数组只有“0”
- 移动 100+ 是个好主意。当我们知道最大数量时,它就可以工作了。
- @geneSummons "int min = Integer.MAX_INT"
这适用于不同的 range/scope 个数字:) 谢谢
顺便说一句。我仍然不明白为什么它只比较第一个和最后一个数字 ;)
我想得到我的数组的最小数量,但是我的"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]
,它看起来更好,而且据我所知稍微加快了速度。它还可以更轻松地更改变量一次,并使其在需要的任何地方都有效。 - 最后一个
S.O.P
被移出循环。如果您可以将语句放在循环结束后的那一行,那么检查循环是否在最后一个元素是没有意义的。它的功能相同,但看起来更好。 - 它没有使用
if
语句来设置最小值,而是使用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();
然后使用相同的 for-loop
想法 randNumbers[i]
而不是 nextInt(101)
- 将值 0 的 min int 移动到外部循环不起作用,因为我的结果每次都是因为未初始化的数组只有“0”
- 移动 100+ 是个好主意。当我们知道最大数量时,它就可以工作了。
- @geneSummons "int min = Integer.MAX_INT" 这适用于不同的 range/scope 个数字:) 谢谢
顺便说一句。我仍然不明白为什么它只比较第一个和最后一个数字 ;)