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。
该代码使用整数,它们之间有空格,并计算平均值并显示
帮我修复它。谢谢
答案 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[] numbers
与String[] num
输入唯一共享的是 length 。数组中的所有项目都保持为零,这本身就足以说明结果为零avg
是double
,tot/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);
}
}