我的代码不起作用,因为它始终将较小的值打印为0。 预先感谢您的帮助。
public class Tests {
public static void main(String [] args){
int [] num=new int[10];
Random random= new Random();
//1st time both big and small value will be at 0
int big=num[0];
int small=num[0];
for(int i=0;i<num.length;i++){
num[i]=random.nextInt(10);
System.out.print(num[i] +" ");
if(num[i]>big){
big=num[i];
}
if(num[i]<small){
small=num[i];
}
}
System.out.println();
System.out.println("Big " + big);
System.out.println("Small " + small);
}
}
请参阅以下问题: 好的结果:
5 1 1 3 8 3 5 1 1 0 大八 小0
不良结果: 6 8 8 1 7 5 2 6 8 4 大八 小0
答案 0 :(得分:2)
这是因为small
为0,并且每个随机值都会在0到10之间生成,因此0是最小的。
要修复此问题,请更改为
int small = Integer.MAX_VALUE;
答案 1 :(得分:2)
启动int数组int [] num=new int[10];
时,它为所有索引分配了zero(0)
。
因此,当您让int small=num[0];
包含零(0)
因此,不管传入的值是多少,后续块始终将small
比较为零(0)。因此,不要更改small
变量!
if(num[i]<small){
small=num[i];
}
分别分配int small=Integer.MAX_VALUE;
和int big=Integer.MIN_VALUE;
,一切都会正常!
答案 2 :(得分:1)
将int small
声明为:
int small = Integer.MAX_VALUE;
现在它可以工作了。
注意:而且最好将int big
声明为
int big = Integer.MIN_VALUE;
答案 3 :(得分:0)
在另一个循环中初始化数组。当您将int数组初始化为0时。
public class Test {
public static void main(String[] args) {
int[] num = new int[10];
Random random = new Random();
for (int i = 0; i < num.length - 1; i++) {
num[i] = random.nextInt(10);
}
//1st time both big and small value will be at 0
int big = num[0];
int small = num[0];
for (int i = 0; i < num.length - 1; i++) {
System.out.print(num[i] + " ");
if (num[i] > big) {
big = num[i];
}
if (num[i] < small) {
small = num[i];
}
}
System.out.println();
System.out.println("Big " + big);
System.out.println("Small " + small);
}
}
答案 4 :(得分:0)
当您说int [] num=new int[10];
时,num
数组将对所有10个位置初始化为0,即num [0] = 0,num [1] = 0 ...
,因此,根据其他人的建议,请使用int small = Integer.MAX_VALUE;
永远记住,当您将一些东西初始化为存储最大的变量时,初始化一个小的值(如0),并为一个小的变量初始化一个尽可能大的数字。