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你的问题是你的平均函数