本帖最后由 聂斌 于 2013-3-11 02:23 编辑
呵呵同学:其实是你之前的求最大值方法出现了问题:
int[] arr={1,5,3,4,2,7,6};
System.out.println(Arrays.toString(arr)); //Arrays.toString(arr) 是返回int数组内容的字符串表示形式
MaxMin mm=new MaxMin();
int max=mm.max(arr);
System.out.println("max="+max);
System.out.println(Arrays.toString(arr));
int min=mm.min(arr);
System.out.println("min="+min);
输出:
[1, 5, 3, 4, 2, 7, 6] 这是原数组
max=7
[7, 5, 3, 4, 2, 7, 6] 这是求出最大值后的数组
min=2
发现:你获得最大值后,,数组改变了,,原因是:
public int max(int[] arr){
for(int j=1; j<arr.length; j++){
if(arr[0]<arr[j])
arr[0]=arr[j]; //当j=1时arr[0]=5,,后面继续比较再赋值,,最后arr[0]的值就是7
}
return arr[0];
}
所以: 这句代码int max=mm.max(arr);执行后,数组就变为[7, 5, 3, 4, 2, 7, 6] ,,
当你执行 代码 int min=mm.min(arr)获取最小值时就返回2了,,,因为原来数组的最小值1被7替换掉了,,,,
解决办法:
获取数组中的最大值。
思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。
通过一个变量进行临储。
2,让数组中的每一个元素都和这个变量中的值进行比较。
如果大于了变量中的值,就用该该变量记录较大值。
3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
步骤:
1,定义变量。初始化为数组中任意一个元素即可。
2,通过循环语句对数组进行遍历。
3,在遍历过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;
public int max(int[] arr){
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
return max;
}
第二种获取最大值的方式: 把那个临时变量初始化为数组中的任意一个角标。
public int max(int[] arr){
int max = 0; //0不作为元素存在而是作为角标存在
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[max])
max = x;
}
return arr[max];
}
以上2中方式都可以.....你其余的代码都不需要修改,,只需修改 max(int[] arr)方法里面的代码就可以了
打印结果:
[1, 5, 3, 4, 2, 7, 6]
max=7
[1, 5, 3, 4, 2, 7, 6]
min=1
|