为了账号安全,请及时绑定邮箱和手机立即绑定

为什么平均小值不对数和哪里错了

为什么平均小值不对数和哪里错了

爱上明早 2016-07-08 10:32:38
 package 练习;public class 第六章练习 { public static void main(String[] args) {  //定义一个整型数组,并赋初始值  int[] nums = { 61 , 23 , 4 , 74 , 13 , 148 , 20 };  int max = nums[0];//假定组大致为数组中的第一个元素  int min = nums[0];//假定最小值为数组中的第一个元素  double sum = 0 ;//累计值  double age = 0 ;//平均值  for(int i=0;i<nums.length;i++){//循环遍历数组中的元素   //如果当前值大于max,则替换max的值   if(nums[i]> nums[0]){    max = nums[i];   }   //如果当前值小于min的值,则替换min的值   if(nums[i]< nums[0]){       min = nums[i];   }      //累加求和   sum = sum+nums[i];  }  //求平均值  age = sum/ ('i'+1) ;  System.out.println("数组中最大的值:"+max);  System.out.println("数组中最小的值:"+min);  System.out.println("数组中的平均值:"+age);  System.out.println("数组中的求和值:"+sum); }}输出的是这:数组中最大的值:148 数组中最小的值:20 数组中的平均值:3.2358490566037736 数组中的求和值:343.0 还有为什么‘i’要用单引号   谢谢啦 
查看完整描述

3 回答

已采纳
?
绿洲仙人球

TA贡献39条经验 获得超47个赞

您好,题主的代码一共有三处错误,

1)最大值比较不对,不应该每次和nums[0]比;既然假定了最大值为nums[0],应该每次和max比较

2)最小值比较不对,不应该每次和nums[0]比;应该每次和min比较

3)平均数求值不对,应该用总数除以个数,这个的i是个在for循环里的局部变量,直接用i除,需要把i在for循环前声明

以下是改正后的代码,请参考

	public static void main(String[] args) {
		// 定义一个整型数组,并赋初始值
		int[] nums = {61, 23, 4, 74, 13, 148, 20 };
		int max = nums[0];// 假定组大致为数组中的第一个元素
		int min = nums[0];// 假定最小值为数组中的第一个元素
		double sum = 0;// 累计值
		double age = 0;// 平均值
		int i = 0;
		for (i = 0; i < nums.length; i++) {// 循环遍历数组中的元素
			// 如果当前值大于max,则替换max的值
			if (nums[i] > max) {
				max = nums[i];
			}
			// 如果当前值小于min的值,则替换min的值
			if (nums[i] < min) {
				min = nums[i];
			}

			// 累加求和
			sum = sum + nums[i];
		}
		// 求平均值
		age = sum / i;
		System.out.println("数组中最大的值:" + max);
		System.out.println("数组中最小的值:" + min);
		System.out.println("数组中的平均值:" + age);
		System.out.println("数组中的求和值:" + sum);
	}


查看完整回答
2 反对 回复 2016-07-08
点击展开后面1
?
提着裤子

TA贡献4条经验 获得超4个赞

这个 i 已经不在for循环里面,所以是访问不到 i ; 至于(‘i’+1)=106  因为这个加上了单引号;就是char 类型了;后面进行运算时就自动的转成了ascil码;'i' 的ascil码是105;这个平均值应该是age = sum/nums.length;

查看完整回答
4 反对 回复 2016-07-08
?
yanrun

TA贡献317条经验 获得超240个赞

问题是if(nums[i]> nums[0]),这样的话是在用数组的第一个值和当前循环到的值进行比较然后把较大的值赋值给max,假设数组的第一个值为1,数组后面的元素的值都大于1,这样计算出来的最大值会是20而不是148,应该改成if (nums[i] > max),最小值同理。这么求平均值貌似是错误的,因为会把i的ascii码值105加1后进行计算,而不是除数组的长度。

查看完整回答
2 反对 回复 2016-07-08
  • 3 回答
  • 0 关注
  • 1570 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信