黑马程序员技术交流社区
标题:
这个疑问你们碰到过吗?
[打印本页]
作者:
雀巢咖啡
时间:
2014-4-17 23:36
标题:
这个疑问你们碰到过吗?
//编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数。
public class test5 {
public static void main(String[] args)
{
int[] arr=new int[5];//创建一个元素个数为5的整形数组
Scanner in=new Scanner(System.in);//输入流
for(int i=0;i<arr.length;i++)//输入数组元素
{
arr[i]=in.nextInt();
}
int max=Max(arr);//调用求最大值的函数
int min=Min(arr);//调用求最小值的函数
System.out.println(max+","+min);
}
static int Min(int[] arr)//求最小值的函数
{
int min=0;
int small=arr[min]; //int small=arr[0];
for(int i=0;i<arr.length;i++)
{
if(arr[i]<small) //if(arr[i]<small)
{
min=i; //smll=arr[i];
}
}
return small;//返回最小值
}
static int Max(int[] arr)//求最大的得函数
{
int max=0;
int big=arr[max]; //int big=arr[0]
for(int j=0;j<arr.length;j++)
{
if(arr[j]>arr[max]) //if(arr[j]>big)
{
max=j; //big=arr[j];
}
}
return big;//返回最大值
}
}
以上循环里为什么实现不了最大值,最小值的查找功能?而当我把标记处的代码改为如上的代码时却又能实现?
复制代码
作者:
月光海
时间:
2014-4-17 23:49
看我代码中的注释
package io.demo;
import java.util.Scanner;
//编写程序接收键盘输入的5个数,装入一个数组,并找出其最大数和最小数。
public class Test5 {
public static void main(String[] args)
{
int[] arr=new int[5];//创建一个元素个数为5的整形数组
Scanner in=new Scanner(System.in);//输入流
for(int i=0;i<arr.length;i++)//输入数组元素
{
arr[i]=in.nextInt();
}
int max=Max(arr);//调用求最大值的函数
int min=Min(arr);//调用求最小值的函数
System.out.println(max+","+min);
}
static int Min(int[] arr)//求最小值的函数
{
int min=0;
int small=arr[min]; //int small=arr[0];
for(int i=0;i<arr.length;i++)
{
if(arr[i]<small) //if(arr[i]<small)
{
min=i; //这里你只是将角标赋给了min,但是并没有把值赋给small啊
small=arr[min];
// small=arr[i];
}
}
return small;//返回最小值
}
static int Max(int[] arr)//求最大的得函数
{
int max=0;
int big=arr[max]; //int big=arr[0]
for(int j=0;j<arr.length;j++)
{
if(arr[j]>arr[max]) //if(arr[j]>big)
{
max=j; //这里你只是将角标赋给了max,但是并没有把值赋给big啊
big=arr[max];
//big=arr[j];
}
}
return big;//返回最大值
}
}
复制代码
作者:
左拉
时间:
2014-4-17 23:55
本帖最后由 左拉 于 2014-4-17 23:58 编辑
你的两个函数返回值都是max和min,在比较的过程中,max和min先是为0,后来不断变换,可是变来变去,max和min都是由arr[max]和arr[min]所决定的值,所以不管你的方法实际执行是否正确,
返回值是数组的
下标
,不是数组中相应的最大最小值!
作者:
igi9009
时间:
2014-4-18 00:13
你两个比较程序比较晚之后并没有重新赋值,返回一直都是arr[0],因此只需要在for循环之后重新赋值就行了,代码如下:
public static void main(String[] args) {
int[] arr=new int[5];//创建一个元素个数为5的整形数组
Scanner in=new Scanner(System.in);//输入流
for(int i=0;i<arr.length;i++)//输入数组元素
{
arr[i]=in.nextInt();
}
int max=Max(arr);//调用求最大值的函数
int min=Min(arr);//调用求最小值的函数
System.out.println(max+","+min);
}
static int Min(int[] arr)//求最小值的函数
{
int min=0;
int small=arr[min]; //int small=arr[0];
for(int i=0;i<arr.length;i++)
{
if(arr[i]<small) //if(arr[i]<small)
{
min=i; //smll=arr[i];
}
}
small=arr[min];//small要重新赋值才行
return small;//注意,你之前返回的small一直是arr[0],
}
static int Max(int[] arr)//求最大的得函数
{
int max=0;
int big=arr[max]; //int big=arr[0]
for(int j=0;j<arr.length;j++)
{
if(arr[j]>arr[max]) //if(arr[j]>big)
{
max=j; //big=arr[j];
}
}
big=arr[max];//big要重新赋值才行
return big;//注意,你之前返回的small一直是arr[0],
}
复制代码
作者:
Sniper_qiu
时间:
2014-4-18 10:30
你这程序必须重新赋值才能返回,不然for循环的值返回下标,而你只是在定义big和small的时候初始化了赋值,跟返回值没关系,所以无法返回。
作者:
Stevenj
时间:
2014-6-18 15:20
看看,这个题,学习下
作者:
yanyoucheng520
时间:
2014-7-10 18:43
我也遇到了,不过想想查询哈资料应该就能做出来了
作者:
_童金辉
时间:
2014-8-11 01:15
学习了
作者:
想成为黑马
时间:
2014-10-31 11:04
学习了,谢谢
作者:
lgc黑马
时间:
2014-12-26 21:27
没有没有没有没有
作者:
延续梦境
时间:
2015-3-2 20:30
你这个并没有重新赋值,返回一直都是arr[0]啊?
作者:
wde34
时间:
2015-3-10 09:48
static int Max(int[] arr)//求最大的得函数
{
int max=0;
int big=arr[max]; //int big=arr[0]
for(int j=0;j<arr.length;j++)
{
if(arr[j]>arr[max]) //if(arr[j]>big)
{
max=j; //big=arr[j]; big一直都没改变值,所以它的值都是arr[max];
}
}
return big;//返回最大值
}
作者:
heima_cy
时间:
2015-8-24 20:42
感谢分享 我也遇到了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2