你这样的判断是不合理的,我们打个比方,比如打了三个数字分别是1,2,3的话,
前面啊int [] a =new int[3];开辟空间,并给三个空间赋上初值0;
第一步:max=0,min=0;//a[0]的值吧?
然后循环判断,if(0<1)//显然是 赋值,if(0>1)//显然也不是,跳过。
第二轮2来了。if(1<2)//是的把a[i]的值赋值给max,在判断(0>2)//不是跳过
第三轮3来了。if(2<3)//是的赋值,再判断0>3
这样最后结果就是max是3,min是0;
如果你非要用这样的方法的话,你只要把min的初始值值改成很大很大的值就可以了,但是不推荐。
以下是合理的做法。
public class MaxminValues {
public static void main(String[] args) {
Scanner he=new Scanner(System.in);
int[]a=new int[3];
int max=0;
int min=0;
for(int i=0;i
a[i]=he.nextInt();
if(a[max] max=i;
}if (a[min]>a[i]){
min=i;
}
} System.out.print("最大值:"+a[max]+"最小值:"+a[min]);
}
}
原因是因为int数组如果不给初始值的话就等于0,所以起始的时候你的max和min都是0,那么如果你输入的都是正整数的话,就都比0大,到结束的时候你的min还是为0,就不对了,最简单的改法就是给min的初始值为100。因为成绩都是0~100正整数。并且你这样写代码有点不规范,成绩一般是0~100(当然也有高于100的情况,比如总分),所以如果是0~100的话就改成这样(当然还有其他的改法):
import java.util.Scanner;
public class MaxminValues {
public static void main(String[] args) {
Scanner he = new Scanner(System.in);
int[] a = new int[3];
int max = 0;
int min = 100;
for (int i = 0; i < a.length; i++) {
System.out.println("输入第" + (i + 1) + "个学生的成绩:");// 注意i+1
int keyinScore = he.nextInt();
if(keyinScore<0 || keyinScore>100) {
System.out.println("请输入0~100的值");
return;
}
a[i] = keyinScore;
if (max < a[i]) {
max = a[i];
}
if (min > a[i]) {
min = a[i];
}
}
System.out.print("最大值:" + max + "最小值:" + min);
}
}
int max=a[0];int min=a[0];有问题最大值和最小值均初始化为0了
a[0]没赋过值,是整数缺省值0
若你输入的数值均是正数,肯定比0大,那么每次最小值均没动还是0
(同理若你输入全部是负数,那么最大值最后结果为0)
建议修改方案(1)int max=Integer.MIN_VALUE;int min= Integer.MAX_VALUE;
或者(2)输入第一个a[0]后,再将a[0]赋值给max和min
那是因为你把min初始化为0了,这句初始化的int min=a[0];当你输入正数的时候最小值当然是0,你可以输入负数,最小值就对了
其实这个题目可以不用for循环的 你可以把得到的三个整数放到一个int数组里 然后再调用Arrays.sort(int[]); 这个方法它会自动帮你按数字升序排序你只
要得到数组中的第一个值和最后一个值就可以了 代码如下
public static void main(String args[]) {
System.out.println("请输入第一个整数:");
int[] i=new int[3];
i[0]=new Scanner(System.in).nextInt();
System.out.println("请输入第二个整数:");
i[1]=new Scanner(System.in).nextInt();
System.out.println("请输入第三个整数:");
i[2]=new Scanner(System.in).nextInt();
Arrays.sort(i);
System.out.println("最大值为:"+i[2]+"最小值为:"+i[0]);
}