[英]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[] numbers
与String[] num
输入唯一共享的是length 。 数组的所有项目保持为零,其本身足以解释零结果 avg
是double
, tot/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.