Аргументы CommandLine в справке Java - PullRequest
3 голосов
/ 24 февраля 2011

Я предполагаю использовать аргументы командной строки для ввода данных пользователем, а затем использовать расширенный цикл for для суммирования.

Это ошибка:

Исключение в потоке "main" java.lang.Error: Неразрешенная проблема компиляции: Несоответствие типов: невозможно преобразовать значение типа double в int

public class EnhanceForLoop {


public static void main(String[] args) {
    // TODO Auto-generated method stub

    if(args.length !=5)
        System.out.println(" please enter no more than 4 numbers");
    else
    {

    double sum; 
    double arrayLength = Double.parseDouble(args[0]);
    double [] myArray = new double [ arrayLength ];

    double value = Double.parseDouble((args[1]));
    double counter = Double.parseDouble((args[2]));


    for(double num: myArray)
      sum += num;


    System.out.printf("The sum is %f ", sum);

    }

}

}

вот как это далеко:

открытый класс EnhanceForLoop {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    if(args.length !=5)
        System.out.println(" please enter no more than 4 numbers");
    else
    {

    double sum = 0.0; 

    int arrayLength = Integer.parseInt(args[0]);
    double [] myArray = new double [ arrayLength ];

    double num1 = Double.parseDouble((args[1]));
    double num2 = Double.parseDouble((args[2]));
    double num3 = Double.parseDouble((args[3]));
    double num4 = Double.parseDouble((args[4]));
    double num5 = Double.parseDouble((args[5]));


    for(double num: myArray)
      sum += num;


    System.out.printf("The sum is %f ", sum);

    }

}

}


Вот ответ:

открытый класс EnhanceForLoop {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    if(args.length !=5)
        System.out.println(" please enter no more than 4 numbers");
    else
    {

    double sum = 0.0; 

    int arrayLength = Integer.parseInt(args[0]);
    double [] myArray = new double [ arrayLength ];

    double num1 = Double.parseDouble((args[1]));
    double num2 = Double.parseDouble((args[2]));
    double num3 = Double.parseDouble((args[3]));
    double num4 = Double.parseDouble((args[4]));



    for(String s: args){
        sum += Double.parseDouble(s);
    }
      System.out.println("Sum: "+sum);
    }




}

} * * тысяча двадцать-один


Ответы [ 3 ]

4 голосов
/ 24 февраля 2011

arrayLength должно быть целым числом. Таким образом

int arrayLength = Integer.parseInt(args[0]);
double [] myArray = new double [ arrayLength ];
3 голосов
/ 24 февраля 2011

Также важно помнить, чтобы думать о потоке вашего кода:

Вы инициализируете массив.Вы суммируете значения в массиве.

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

2 голосов
/ 24 февраля 2011

Вы суммируете массив, заполненный 0.0 (так как это значение по умолчанию), а не аргументы командной строки.

Если вы хотите суммировать аргументы, вы должны перебирать их (= массив args), преобразуйте каждый аргумент в двойной и сложите их.Вам вообще не нужен double[].


Редактировать: (после некоторых комментариев)

В вашем примере кода вашего вопроса вы используете расширенный цикл forмассив, так что, кажется, вы знаете, что такое цикл.Итак, теперь используйте массив args вместо вашего myArray.Внутри цикла вы делаете Integer.parseInt(...) или Double.parseDouble или аналогичный и добавляете результат в переменную sum.

Если вам нужно более одного оператора в цикле, используйте { ... } длясгруппируйте их.

...