如何计算数组的平均值

时间:2018-07-10 17:49:50

标签: java

import java.util.*;
import java.lang.*;


public class MyClass 
{
    
        String[] getdata()
        {
            Scanner in=new Scanner(System.in);
            System.out.print("Enter numbers to calculate their average (choose 5 to 10 numbers only : ");
            
            String[] a=in.nextLine().split(" ");
            return a;
        }
        double average(String[] num)
        {
            double avg;
            int tot=0;
            int[] numbers = new int[num.length];
            int l=num.length;
            for(int j=0;j<l;j++)
            {
                tot=tot+numbers[j];
            }
            avg=tot/l;
            return avg;
        }
        void results(String[] arr,double avg)
        {
            int[] numbers1=new int[arr.length];
            int ll=arr.length;
            System.out.print("The average of the numbers ");
            for(int i=0;i<ll;i++)
            {
                numbers1[i]=Integer.parseInt(arr[i]);
                System.out.print(numbers1[i]+" ");
                
            }
            System.out.print("is ");
            System.out.printf("%.2f",avg);
        }
        
    public static void main(String args[]) 
    {
        MyClass obj=new MyClass();
        String[] x=obj.getdata();
        double y=obj.average(x);
        obj.results(x,y);
    }
}

代码成功运行,但是对于任何给定的输出,平均值显示为0.00。

该代码使用整数,它们之间有空格,并计算平均值并显示

帮我修复它。谢谢

8 个答案:

答案 0 :(得分:3)

不要在numbers方法中初始化average()数组。 代替tot=tot+numbers[j];进行以下

tot = tot + Integer.parseInt(num[j]);

如果在avg后面加上

,则要避免整数删除更改计算
avg = 1.0 * tot / l; //this will cast intermediate result of 1.0 * tot to double.

答案 1 :(得分:3)

您的代码有几个问题:

  • int[] numbersString[] num输入唯一共享的是 length 。数组中的所有项目都保持为零,这本身就足以说明结果为零
  • 即使avgdoubletot/l也是int。可以根据num中的值将其截断为零。

您需要修改代码以解析String中的num,并将total计算为double。之后,该部门将返回正确的结果。

此外,如果从int[]方法返回getdata(),则可以避免多个字符串解析。由于输入的数量很少,因此这对于代码的性能并不是至关重要的。

答案 2 :(得分:0)

您永远不会将值从String[] num复制到int[] numbers,因此,当您遍历整个数组numbers时,您将要对默认值0求和,l次。

您需要对parseInt()中的所有值使用num才能将其转换为int并将其存储在numbers中,然后确保执行float(tot)/l进行强制转换在分裂期间漂浮。这样可以避免由于整数除法而导致截断。

答案 3 :(得分:0)

在平均值方法中,创建一个称为数字的空数组。您正在根据该为空的数组计算平均值。

希望这会有所帮助

答案 4 :(得分:0)

您的数字数组在平均值函数中是错误的。请在下面找到更正的代码,

{
    "type":"record",
    "name":"topLevelRecord",
    "fields":[
         {
            "name":"value",
            "type":["bytes","null"]
         }
    ]
} 

根据需要更改数据类型。

答案 5 :(得分:0)

我建议从getdata()打印double average(String[] num) { double avg; int tot=0; int l=num.length; for(int j=0;j<l;j++) { tot=tot+Integer.parseInt(num[j]); } avg=tot/l; return avg; } ,以确保正确输入您的电话号码。我最好的猜测是拆分命令中的某些内容无法正常工作。

答案 6 :(得分:0)

您的问题是您的平均职能。您初始化了int[] num数组,但是没有在其中写入int值。您可以按照与void results(String[] arr,double avg)中相同的方式进行操作。

另一个问题是,您获得了平均avg = tot/l;,其中tot和l是int值。当您将2个整数值相除时,结果也为int,并且int值将被写入'avg'中。如果平均值是浮点数(示例输入“ 1 2”),则浮选部分将被截断,并且您的程序将返回avg =1。因此,除法运算至少需要一个变量,该变量为double。

这应该工作:

    double average(String[] num)
    {
        double avg;
        double tot=0;
        int l=num.length;
        for(int j=0;j<l;j++)
        {
            tot=tot+Integer.parseInt(num[j]);
        }
        avg= tot/l;
        return avg;
    }

答案 7 :(得分:0)

在您的代码中,您没有初始化number []数组。

double average(String[] num)
     {
         double avg;
         double tot=0;
         int[] numbers = new int[num.length];
         for(int i=0;i<num.length;i++)
         {
             numbers[i]=Integer.parseInt(num[i]);
         }
         int l=num.length;
         for(int j=0;j<l;j++)
         {
             tot=tot+numbers[j];
         }
         avg=tot/l;
         return avg;
     }

如果使用的是> Jdk8。您可以使用

double average(String[] num) {
        OptionalDouble tot = Arrays.stream(num).mapToInt(s -> Integer.parseInt(s)).average();
        return tot.orElse(0.0);
    }

}