如何在Java中使用命令行的平均数字

问题描述:

这是一个学校作业。我真的很想了解我在做什么。我们被指示使用从命令行运行的Java编写程序。用户输入数字后,程序应该开始,发送欢迎消息,然后告诉用户他的数字的平均值是多少。如何在Java中使用命令行的平均数字

我相信这一点的目的是说明如何在程序中使用args并帮助我们熟悉Java。

这是我目前的解释。我可以从命令行运行此命令,我知道如何添加欢迎消息......但是,我不明白代码的好处,以便能够在用户添加参数时添加平均数字的能力。

public class ArgumentExample { 

    public static void main(String[] args) { 

     if(args.length == 1 || args.length > 1){ 
      System.out.println(args[0]); 
     } 

     if(args.length > 1) { 
      for(int i = 1; i < args.length; i++){ 
       System.out.println(args[i]); 
      } 
     } 
    } 
} 

public class ArgumentExample { 

     public static void main(String[] args) { 
      int i = 0; // declare a counter here so you can use it in the catch 
      double tot = 0.0d; // declare the accumulator variable 
      try { 
       for (i = 0; i < args.length; i++) { // iterate over arguments...if only one is present returns just that one 
        tot += Double.parseDouble(args[i]); // sum 
       } 
      } catch (Exception ex) { 
       System.out.println("Argument " + i + " is not a number");// print which argument is not a number if any 
      } 
      System.out.println("Sum is: " + tot/(args.lenght == 0 ? 1 : args.lenght); // final print statement 
     } 
    } 
+0

您是否可以在0.0d后解释d也是如果有一个特定的原因使得变量总是......这是否代表您的头脑中有某些东西,或者它只是您使用的东西?我只是想试着把我的头围绕在整个事情上。万分感谢。 – wuno

+0

“d”明确声明该常数为double。你也可以使用“f”作为浮点数。我声明了tot来存储如果在for循环中声明将被覆盖的累进总和。 – elbuild

+0

grrrrrr你把数字加在一起......我整晚看着这个数字,然后意识到它只是添加它们......我简直不敢相信。对我的笑话耶...谢谢... – wuno

现在,您只需打印输出到args阵列中的参数。这不是一大步,从那里转化String参数为数字(比如说,双打),加上那些运行总和的循环,在循环之后通过参数的数目除以:

double sum = 0; 
    if (args.length >= 1) { 
     for (int i = 0; i < args.length; i++) { 
      sum += Double.parseDouble(args[i]); 
     } 
     System.out.println("Average = " + sum/args.length); 
    } 

翻一番基本类型double的包装类。它有方便的方法parseDouble你可以通过String,它会尝试将它转换为double类型。我们应该使用双精度而不是整数,因为双精度的精度更高。如果你除5/2,你会得到2,而不是2.5,除非你确定5和2被视为双打。

请注意,这没有错误检查,因此如果任何参数不能解析为Double,则会抛出异常而失败。

+0

你不考虑的第一个参数。 args指数是以0为基础的 – elbuild

+0

啊,忘了改变起始指数。感谢那! –

argsString数组的参考,它包含启动时传递到程序中的所有参数。

数组使用0基础系统引用该位置的对象,因此args[0]是传递给程序的第一个参数。

for(int i = 1; i < args.length; i++)环 正在经历的阵列,直到打印每个参数

学生往往把太多的东西,到主后到达终点(i = length - 1)

我建议你把真正的工作纳入明智的方法,你可能有一天使用和传递数据出来,像这样:

public class StatisticsUtils { 
    public double average(double [] values) { 
     double average = 0.0; 
     if ((values != null) && (values.length > 0)) { 
      for (double value : values) { 
       average += value; 
      } 
      average /= values.length; 
     } 
     return average; 
    } 
} 

为了让你必须建立数字的平均值它们的总和,然后除以参数的数量。例如

public class ArgumentExample 
{ 
    public static void main(String[] args) { 

    int sum = 0; 

    // step through all arguments 
    for(String arg : args) 
    { 
    try 
    { 
     // try to convert the argument to an integer 
     int number = Integer.parseInt(arg); 
     // sum it 
     sum += integer; 
    } 
    catch(NumberFormatException e) 
    { 
     // the currently processed argument couldn't be converted 
     // to a number 
     System.out.println(arg + " is not a number"); 
    } 
    } 

    // average = sum/valuecount 
    double average = sum/args.length; 

    System.out.println("average = " + average); 
} 

Java的罐子ArgumentExample 1 2 3 4 5将导致进入3.希望帮助