繁体   English   中英

如何计算数组的平均值

[英]How to calculate average of an Array

 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。

该代码接受整数,并在它们之间留有空格,并计算平均值并显示出来

帮我解决。 谢谢

您没有在average()方法中初始化numbers数组。 代替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.

您的代码有几个问题:

  • int[] numbersString[] num输入唯一共享的是length 数组的所有项目保持为零,其本身足以解释零结果
  • 即使avgdoubletot/l也是int 可以将其截断为零,具体取决于num的值。

您需要修改代码以从num解析String ,然后将total计算为double 之后,除法将返回正确的结果。

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

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

您需要对num所有值使用parseInt()将其转换为int并将它们存储为numbers ,然后确保在除法过程中执行float(tot)/l将其转换为float。 这样可以避免由于整数除法而导致截断。

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

希望这可以帮助

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

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;
        }

根据需要更改数据类型。

我建议从getdata()打印a ,以确保正确输入您的数字。 我最好的猜测是,split命令中的某些内容无法正常工作。

您的问题是平均功能。 您初始化了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;
    }

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

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);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM