Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java计算平均值_Java_For Loop_Count_Average - Fatal编程技术网

用java计算平均值

用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[

EDIT:我已经为平均值编写了代码,但我不知道如何使它也使用我的
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);
          }
       }
    }