Java Сумма чисел до ввода строки - PullRequest
0 голосов
/ 24 апреля 2020

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

Мне нужно написать программу, которая запрашивает у пользователя число и постоянно суммирует введенные числа и выводит результат. Эта программа останавливается, когда пользователь вводит «END»

Я просто не могу думать о решении этой проблемы, любая помощь или руководство по этой проблеме будет высоко цениться и действительно поможет мне понять такие проблемы, как это. Это лучшее, что я мог сделать

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

while (true) {
    System.out.print("Enter a number: ");
    int x = scan.nextInt();
    System.out.print("Enter a number: ");
    int y = scan.nextInt();

    int sum = x + y;


    System.out.println("Sum is now: " + sum);   

}   


}
    }   

Вывод должен выглядеть примерно так:

Введите число: 5

Сумма сейчас: 5

Введите число: 10

Сумма сейчас: 15

Введите число: END

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Одним из решений было бы не использовать метод Scanner # nextInt () вообще, а вместо этого использовать метод Scanner # nextLine () и подтвердить ввод числовой записи с помощью метод String # matchs () вместе с небольшим регулярным выражением (RegEx) "\ d +" . Это выражение проверяет, содержит ли вся строка только числовые цифры. Если это так, то метод match () возвращает true, в противном случае он возвращает false.

Scanner scan = new Scanner(System.in);
int sum = 0; 
String val = "";
while (val.equals("")) {
    System.out.print("Enter a number (END to quit): ");
    val = scan.nextLine();
    // Was the word 'end' in any letter case supplied?
    if (val.equalsIgnoreCase("end")) {
        // Yes, so break out of loop.
        break;
    }
    // Was a string representation of a 
    // integer numerical value supplied?  
    else if (val.matches("\\-?\\+?\\d+")) {
        // Yes, convert the string to integer and sum it. 
        sum += Integer.parseInt(val);
        System.out.println("Sum is now: " + sum);  // Display Sum
    }
    // No, inform User of Invalid entry
    else {
        System.err.println("Invalid number supplied! Try again...");
    }
    val = "";  // Clear val to continue looping
}

// Broken out of loop with the entry of 'End"
System.out.println("Application ENDED"); 

РЕДАКТИРОВАТЬ: на основе комментария:

, поскольку поскольку целое число может быть со знаком (ie: -20) или без знака (ie: 20) и тот факт, что целое число может иметь префикс + (ie: +20), что совпадает с unsigned 20, фрагмент кода выше учитывает это.

1 голос
/ 24 апреля 2020

Сделайте это следующим образом:

public static void main(String[] args) throws Exception {
    int sum = 0;
    Scanner scan = new Scanner(System.in);

    while (scan.hasNext()) {
        System.out.print("Enter a number: ");

        if (scan.hasNextInt())
            sum += scan.nextInt();
        else
            break;


        System.out.println("Sum is now: " + sum);
    }

    System.out.print("END");
}

Это закончится, если ввод не является числом (int).

Как указано в комментариях, если вы хотите, чтобы чтобы остановить программу, когда пользователь специально вводит «END», измените else состояние на:

else if (scanner.next().equals("END"))
    break;
...