2014-01-25 3 views
2

Это школьное задание. Я действительно хочу понять, что я делаю. Нам поручено сделать программу на 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]); 
      } 
     } 
    } 
} 

ответ

2
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

Не могли бы вы объяснить d после 0.0d. Кроме того, если была определенная причина, вы сделали переменную tot ... это означало что-то в вашей голове или это было что-то, что вы использовали?Я просто хочу попытаться обернуть голову вокруг всего. Благодаря тонну. – wuno

+0

«d» явно объявляет константу как двойную. Вы можете использовать «f» для поплавка. Я объявлял tot для хранения прогрессивной суммы, которая была бы перезаписана, если объявлена ​​в цикле for. – elbuild

+0

grrrrrr вы добавили числа вместе ... Я посмотрел на это всю ночь, превратив его в онлайн, после чего понял, что просто добавляет их ... Я не могу в это поверить. Шутки на мне yay ... спасибо ... – wuno

1

Прямо сейчас вы просто распечатав аргументы, которые ставят в 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. Мы должны использовать здесь двойники вместо ints из-за более высокой точности удвоений - например, если вы разделите 5/2, вы получите 2, а не 2.5, если только вы не убедитесь, что 5 и 2 рассматриваются как парные.

Обратите внимание, что это не проверяет ошибки, поэтому оно не будет выполнено путем исключения исключения, если какой-либо из аргументов не будет обрабатываться двойным.

+0

вы не считая первый ARG. args index 0-based – elbuild

+0

Ах, забыл изменить начальный индекс. Спасибо за это! –

1

args - это ссылка на массив String, который содержит все аргументы, переданные в программу при ее запуске.

В массиве используется базовая система 0 для ссылки на объект в этом положении, поэтому args[0] - это первый аргумент, переданный программе.

for(int i = 1; i < args.length; i++) петля проходит через массив, пока он не достигнет конца (i = length - 1) после печати каждого аргумента

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; 
    } 
} 
1

Чтобы получить среднее значение чисел, вы должны построить их сумму, а затем делить на количество аргументов. Например

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 -jar ArgumentExample 1 2 3 4 5 приведет к 3. Надежда, что помогает

Смежные вопросы