Java 如何计算数组的平均值

Java 如何计算数组的平均值,java,Java,import java.util.*; 导入java.lang.*; 公共类MyClass { 字符串[]getdata() { 扫描仪输入=新扫描仪(系统输入); System.out.print(“输入数字以计算其平均值(仅选择5到10个数字:”); 字符串[]a=in.nextLine().split(“”); 返回a; } 双平均(字符串[]个) { 双平均值; int-tot=0; int[]number=新int[num.length]; int l=num.length; 对于(i

import java.util.*;
导入java.lang.*;
公共类MyClass
{
字符串[]getdata()
{
扫描仪输入=新扫描仪(系统输入);
System.out.print(“输入数字以计算其平均值(仅选择5到10个数字:”);
字符串[]a=in.nextLine().split(“”);
返回a;
}
双平均(字符串[]个)
{
双平均值;
int-tot=0;
int[]number=新int[num.length];
int l=num.length;

对于(int j=0;j您不需要在
average()方法中初始化
numbers
数组。 执行以下操作,而不是
tot=tot+numbers[j];

tot = tot + Integer.parseInt(num[j]);
avg = 1.0 * tot / l; //this will cast intermediate result of 1.0 * tot to double.
为了避免整数删除,如果
avg
,则将计算更改为以下值

tot = tot + Integer.parseInt(num[j]);
avg = 1.0 * tot / l; //this will cast intermediate result of 1.0 * tot to double.

您不需要在
average()方法中初始化
numbers
数组。 执行以下操作,而不是
tot=tot+numbers[j];

tot = tot + Integer.parseInt(num[j]);
avg = 1.0 * tot / l; //this will cast intermediate result of 1.0 * tot to double.
为了避免整数删除,如果
avg
,则将计算更改为以下值

tot = tot + Integer.parseInt(num[j]);
avg = 1.0 * tot / l; //this will cast intermediate result of 1.0 * tot to double.

您从不将值从
String[]num
复制到
int[]numbers
,因此当您循环遍历整个数组
numbers
时,您将对默认值
0
l
进行求和


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

您从不从
String[]num
到您的
int[]numbers
,因此当您在整个数组中循环
numbers
时,您将对默认值
0
l
次求和


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

在average方法中,您创建了一个名为number的空数组。您将基于该空数组计算平均值


希望这有助于

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


希望这对您有所帮助

您的代码有几个问题:

  • int[]numes
    String[]num
    输入共享的唯一内容是长度。数组的所有项都保持为零,这本身就足以解释零结果
  • 尽管
    avg
    double
    tot/l
    int
    。根据
    num
    中的值,它可以被截断为零
您需要修改代码以从
num
解析
String
s,并将
total
计算为
double
。然后除法将返回正确的结果


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

您的代码有几个问题:

  • int[]numes
    String[]num
    输入共享的唯一内容是长度。数组的所有项都保持为零,这本身就足以解释零结果
  • 尽管
    avg
    double
    tot/l
    int
    。根据
    num
    中的值,它可以被截断为零
您需要修改代码以从
num
解析
String
s,并将
total
计算为
double
。然后除法将返回正确的结果


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

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

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;
        }
双平均值(字符串[]num)
{
双平均值;
int-tot=0;
int l=num.length;

对于(int j=0;j您的数字数组在平均值函数中是错误的。请在下面找到更正的代码

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;
        }
双平均值(字符串[]num)
{
双平均值;
int-tot=0;
int l=num.length;

对于(int j=0;j我建议从getdata()打印
a
,以确保您的数字输入正确。我的最佳猜测是split命令中的某些部分工作不正常。

我建议从getdata()打印
a
)确保正确输入您的数字。我的最佳猜测是split命令中的某些部分工作不正常。

您的问题是您的平均函数。您初始化了
int[]num
数组,但您没有在其中写入
int
值。您可以按照与
void results中相同的方式执行此操作(字符串[]arr,双平均值)

另一个问题是,得到的是平均值
avg=tot/l;
,其中tot和l是int值。当你除以2个整数值时,结果也是一个
int
,并且
int
值将写入“avg”。如果平均值是一个浮点数(例如输入“1 2”),然后floiting部分被切断,程序返回avg=1。因此除法至少需要一个变量,即双变量

这一条应该有效:

    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;
    }
双平均值(字符串[]num)
{
双平均值;
双tot=0;
int l=num.length;

对于(intj=0;j你的问题是你的平均函数