Аргументы командной строки в справке java

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




}

}



person Mugetsu    schedule 23.02.2011    source источник
comment
Вы не можете создать массив с new double[arrayLength], если arrayLength не является целым числом.   -  person Chris Nash    schedule 24.02.2011
comment
так, и теперь вы можете удалить лишний код из своего решения, обо всем, кроме цикла и System.out.println после него.   -  person Paŭlo Ebermann    schedule 24.02.2011


Ответы (3)


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

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


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

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

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

person Paŭlo Ebermann    schedule 23.02.2011
comment
[код] public static void main (String [] args) { int sum; int num1 = Integer.parseInt (аргументы [0]); int num2 = Integer.parseInt (аргументы [1]); сумма = число1 + число2; System.out.printf(Сумма равна %d , сумма); } }[/код] - person Mugetsu; 24.02.2011
comment
@Mugetsu: Не добавляйте код в комментарий (здесь он не читается), добавляйте его в свой вопрос (если он нужен для понимания) - он ссылка на редактирование. - person Paŭlo Ebermann; 24.02.2011
comment
Я должен использовать расширенный цикл for для суммирования чисел, и я знаю, как это сделать, когда я сохраняю числа, например: `code' int sum; int num1 = Integer.parseInt (аргументы [0]); int num2 = Integer.parseInt (аргументы [1]); сумма = число1 + число2; System.out.printf(Сумма равна %d , сумма); - person Mugetsu; 24.02.2011
comment
как я могу использовать массив args? - person Mugetsu; 24.02.2011
comment
@Mugetsu: поместите его в то место, где вы сейчас используете myArray. - person Paŭlo Ebermann; 24.02.2011

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

int arrayLength = Integer.parseInt(args[0]);
double [] myArray = new double [ arrayLength ];
person Jim Garrison    schedule 23.02.2011
comment
В этой строке: double [] myArray = new double [arrayLength]; конструктор массива принимает в качестве аргумента только целые числа. привести его к int - person hooch; 24.02.2011
comment
Спасибо, исправил, но к сожалению появилась другая проблема: при компиляции сумма была 0.000000 - person Mugetsu; 24.02.2011

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

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

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

person Jason Sendros    schedule 23.02.2011
comment
не могли бы вы помочь мне добавить расширенный цикл for - person Mugetsu; 24.02.2011