用java计算平均值
EDIT:我已经为平均值编写了代码,但我不知道如何使它也使用我的用java计算平均值,java,for-loop,count,average,Java,For Loop,Count,Average,EDIT:我已经为平均值编写了代码,但我不知道如何使它也使用我的args.length中的ints,而不是数组。 我需要编写一个java程序,可以计算: 读入的整数数 平均值–不必是整数 注意:我不想计算数组的平均值,而是计算args中的整数 目前我写了以下内容: int count = 0; for (int i = 0; i<args.length -1; ++i) count++; System.out.println(count); } int nums[
args.length
中的int
s,而不是数组。
我需要编写一个java程序,可以计算:
args
中的整数
目前我写了以下内容:
int count = 0;
for (int i = 0; i<args.length -1; ++i)
count++;
System.out.println(count);
}
int nums[] = new int[] { 23, 1, 5, 78, 22, 4};
double result = 0; //average will have decimal point
for(int i=0; i < nums.length; i++){
result += nums[i];
}
System.out.println(result/count)
int count=0;
对于(inti=0;i
for(inti=0;i只需对代码稍作修改即可(为清晰起见,对一些var重命名):
编辑:OP似乎想要使用args
数组。这似乎是一个字符串数组,因此相应地更新了答案
更新:
正如zoxqoj正确指出的那样,上面的代码没有考虑整数/双精度溢出。虽然我假设输入值足够小,不会出现这个问题,但这里有一个片段可用于真正大的输入值:
BigDecimal sum = BigDecimal.ZERO;
for(String arg : args){
sum = sum.add( new BigDecimal( arg ) );
}
这种方法有几个优点(尽管有点慢,所以不要将其用于时间关键型操作):
- 精度保持不变,随着数学运算次数的增加,精度会逐渐降低(或者根本得不到精确精度,具体取决于数字)
- 溢出的可能性实际上已消除。但是,请注意,
BigDecimal
可能大于double
或long
中的溢出概率
无法执行此操作,因为result/count不是字符串类型,System.out.println()只接受字符串参数。请尝试:
double avg = (double)result / (double)args.length
int值[]={23,1,5,78,22,4};
整数和=0;
对于(int i=0;i
对于1.读取的整数数,您可以使用数组的长度属性,如:
int count = args.length
在数组中没有任何元素。
和2.计算平均值:
您正在以正确的方式进行操作。而不是:
int count = 0;
for (int i = 0; i<args.length -1; ++i)
count++;
System.out.println(count);
}
平均值是arg的总和除以arg的数量
int res = 0;
int count = args.lenght;
for (int a : args)
{
res += a;
}
res /= count;
你也可以把代码缩短,我会让你试着问你是否需要帮助
这是我的第一个答案,所以如果出现问题,请告诉我!如果您试图从命令行args获取整数,您将需要以下内容:
public static void main(String[] args) {
int[] nums = new int[args.length];
for(int i = 0; i < args.length; i++) {
try {
nums[i] = Integer.parseInt(args[i]);
}
catch(NumberFormatException nfe) {
System.err.println("Invalid argument");
}
}
// averaging code here
}
publicstaticvoidmain(字符串[]args){
int[]nums=新的int[args.length];
对于(int i=0;i
至于实际的平均代码,其他人建议如何调整(所以我不会重复他们所说的)
编辑:实际上,最好将它放在上面的循环中,而不使用nums
数组。我将向您展示两种方法。如果您的项目中不需要很多统计数据,只需实现以下内容
public double average(ArrayList<Double> x) {
double sum = 0;
for (double aX : x) sum += aX;
return (sum / x.size());
}
公共双平均(ArrayList x){
双和=0;
对于(双aX:x)和+=aX;
返回值(总和/x.size());
}
如果你打算做大量的统计数据,不妨不要重新发明轮子。那么为什么不看看呢
你会成为真正的爱人!公共类MainTwo{
public class MainTwo{
public static void main(String[] arguments) {
double[] Average = new double[5];
Average[0] = 4;
Average[1] = 5;
Average[2] = 2;
Average[3] = 4;
Average[4] = 5;
double sum = 0;
if (Average.length > 0) {
for (int x = 0; x < Average.length; x++) {
sum+=Average[x];
System.out.println(Average[x]);
}
System.out.println("Sum is " + sum);
System.out.println("Average is " + sum/Average.length);
}
}
}
公共静态void main(字符串[]参数){
双[]平均值=新双[5];
平均[0]=4;
平均[1]=5;
平均[2]=2;
平均[3]=4;
平均[4]=5;
双和=0;
如果(平均长度>0){
对于(int x=0;x
这似乎是一条古老的思路,但Java从那时起就不断发展&在Java8中引入了Streams和Lambdas。因此,可能会帮助所有希望使用Java8功能的人
- 在本例中,您希望将字符串[]的args转换为double
您可以使用
Arrays.stream(
- 如果不想以增量方式进行平均,可以直接使用Java的
收集器.averagingDouble()
直接计算并返回average.some
args.length已包含您的计数
,不需要第一个for循环。您有什么问题?您是否要求改进?您的代码是否有效?您想知道如何转换args[]
到一个int
-array?int count=args.length;
来获取参数的数量..这两个代码是否相关?因为在第二个for循环中,您使用的是count.related:对不起,我不清楚,我为平均值编写了代码,但我不知道如何使它也使用args.length中的int,而不是arrayI使用args时出错。“线程“main”java.lang中出现异常。错误:未解决的编译问题:类型不匹配:无法从元素类型字符串转换为int”注意,res/=count
将进行整数除法,因此肯定会产生错误的结果(OP说明平均值可能包含小数点)@syncoroll您没有告诉我们args
实际上是什么-因此可能会假设它是int[]args
。很可能您有String[]args
(这是一个main
方法,对吧?),因此您必须将for循环更改为for(String a:args)
并调用res+=Integer.parseInt(a)
inside。你知道,我不会为你的作业测试代码!这只是一种方法,一种算法。它应该可以工作,这取决于你变量的类型。如果我使用args.length而不是nums.length,我会怎么做
int count = 0;
for (int i = 0; i<args.length -1; ++i)
count++;
System.out.println(count);
}
int count = args.length;
int res = 0;
int count = args.lenght;
for (int a : args)
{
res += a;
}
res /= count;
public static void main(String[] args) {
int[] nums = new int[args.length];
for(int i = 0; i < args.length; i++) {
try {
nums[i] = Integer.parseInt(args[i]);
}
catch(NumberFormatException nfe) {
System.err.println("Invalid argument");
}
}
// averaging code here
}
public double average(ArrayList<Double> x) {
double sum = 0;
for (double aX : x) sum += aX;
return (sum / x.size());
}
public class MainTwo{
public static void main(String[] arguments) {
double[] Average = new double[5];
Average[0] = 4;
Average[1] = 5;
Average[2] = 2;
Average[3] = 4;
Average[4] = 5;
double sum = 0;
if (Average.length > 0) {
for (int x = 0; x < Average.length; x++) {
sum+=Average[x];
System.out.println(Average[x]);
}
System.out.println("Sum is " + sum);
System.out.println("Average is " + sum/Average.length);
}
}
}