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

 

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’要用单引号   谢谢啦

 

爱上明早
浏览 1571回答 3
3回答

绿洲仙人球

您好,题主的代码一共有三处错误,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); }

提着裤子

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

yanrun

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

相关分类

Java