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

public static void main(String args[]) {

    double total = 0;
    int counter = 0;

    ArrayList<String> answerYes = new ArrayList<>();
    answerYes.add("yes");
    answerYes.add("y");
    answerYes.add("yea");


    Scanner answerCheck = new Scanner(System.in);
    System.out.println("Would you like to submit a number to calculate the average? [y/n]");
    String userInput = answerCheck.nextLine();
    while (answerYes.contains(userInput)) {
        Scanner numberInput = new Scanner(System.in);
        System.out.println("Please input a number: ");
        Integer number = numberInput.nextInt(); //Here is where I need to check for a non-integer.
        total += number;
        System.out.println("Would you like to submit another number to calculate the average? [y/n]");
        userInput = answerCheck.nextLine();
        counter++;
    }
    double average = total/counter;
    System.out.println("The average of those numbers is: " + average);

}

Я почти уверен, что сделал это более сложным, чем это должно было быть, но я хотел проверить свою способность сделать обычный калькулятор, как без интернета. Надеюсь, я отформатировал это правильно.

Спасибо Джордан

-3
JordanMorris 29 Май 2017 в 04:00

2 ответа

Лучший ответ

Вам нужен только один Scanner, и вы можете использовать String.startsWith вместо проверки коллекции. Что-то вроде,

double total = 0;
int counter = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Would you like to submit a number to calculate the average? [y/n]");
String userInput = scan.nextLine();
while (userInput.toLowerCase().startsWith("y")) {
    System.out.println("Please input a number: ");
    if (scan.hasNextInt()) {
        total += scan.nextInt();
        counter++;
    }
    scan.nextLine();
    System.out.println("Would you like to submit another number to calculate the average? [y/n]");
    userInput = scan.nextLine();
}
double average = total / counter;
System.out.println("The average of those numbers is: " + average);
1
Elliott Frisch 29 Май 2017 в 01:08

Я думаю, что вы хотите сделать что-то вроде этого.

try {
    int input = scanner.nextInt();
    // remaining logic
} catch (InputMismatchException e) {
    System.out.println("uh oh");
}

Поэтому, если пользователь вводит что-то, что не может быть прочитано как целое число, он выдаст InputMismatchException.

Вы можете расширить это, поместив его в цикл, заставляя пользователя вводить число, прежде чем продолжить.

1
Kevin 29 Май 2017 в 01:07