Как убрать костыли из вычисления суммы чисел, введенных в консоли?

366
29 января 2017, 13:04

Есть задача:
В первой строке ввести n - количество целых чисел. Во второй строке ввести числа через пробел, чисел может быть введено >n. Вывести сумму n первых введенных чисел.
Решение довольно простое:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int amountOfNum = scanner.nextInt();
    scanner.skip("\n");
    String numString = scanner.nextLine();
    String[] arrayNum = numString.split(" ");
    int summ = 0;
    for (int i = 0; i < amountOfNum; i++) {
        summ += Integer.parseInt(arrayNum[i]);
    }
    System.out.println(summ);
}

Но по самому решению есть вопросы:

  1. Как то же самое сделать без строки scanner.skip("\n");? Т.к. это очевидный костыль, но без этой строки scanner.nextLine() считывает предыдущий перенос строки и не дает ввести числа
  2. Есть ли еще варианты извлечения из строки чисел без использования метода split? Только парсить вручную?
  3. Для чего это нужно? Исключительно академический интерес.
Answer 1

По поводу пунктов 1 и 2: достаточно использовать nextInt вместо nextLine:

public static void main(String[] args)
{
    Scanner scanner = new Scanner(System.in);
    int amountOfNum = scanner.nextInt();
    int summ = 0;
    for (int i = 0; i < amountOfNum; i++)
    {
        summ += scanner.nextInt();
    }
    System.out.println(summ);
}

По поводу пункта 3: если задача придумана для того, чтобы обучить считыванию чисел с консоли, то нужно это... для обучения считыванию чисел с консоли. На практике такое может потребоваться только в какой-то расчудесной ситуации, при которой нужно посчитать сумму больших чисел, но при этом вы не можете воспользоваться калькулятором, зато у вас есть эта программа и возможность её запустить.

READ ALSO
Android intent как &ldquo;Поделиться&rdquo; двумя строками?

Android intent как “Поделиться” двумя строками?

Я пытался сделать встроенный редактор JSON в своём Android приложенииОдна из функций этого редактора - возможность отправить имя файла и его содержимое...

393
Чтение переменной реестра с типом reg_binary

Чтение переменной реестра с типом reg_binary

Как считать значение переменной реестра типа reg_binary? К примеру значение переменной типа reg_sz читаю кодом нижеНо при попытке обратиться к типу...

412
Выборка из БД Realm Android

Выборка из БД Realm Android

Решил попробовать данную БД для работы, но никак не пойму, как вытаскивать оттуда данныеЗанести получилось, потом использую: realm

574