Решить проблемы if / else при получении входных данных сканера - PullRequest
0 голосов
/ 01 июня 2018

Я создал два объекта Scanner и получил их.но когда получение входных данных закончено, если коды не работают.В чем проблема? Основная проблема заключается в «InputMismatchException».Когда пользователь введет значение, кроме двойного, программа покажет ему «Пожалуйста, введите правильный формат».я хочу обработать это исключение с этими двумя входами.Что такое правильный код? Можете ли вы объяснить мне, пожалуйста, и написать правильный код? TNX.

import java.util.Scanner;

public class NestedIf {

public static void main(String[] args) {


    Scanner iqInput=new Scanner(System.in);
    System.out.println("Please enter your IQ: ");
    iqInput.nextDouble();


    Scanner termMeanInput=new Scanner(System.in);
    System.out.println("Please enter your term mean: ");
    termMeanInput.nextDouble();


    if(iqInput.hasNextDouble() && termMeanInput.hasNextDouble()){

        if(iqInput.nextDouble()>110 && termMeanInput.nextDouble()>18){
            System.out.println("You got 30 percent discount.");

        }else if(iqInput.nextDouble()>100 && termMeanInput.nextDouble()>17){
            System.out.println("You got 20 percent discount.");

        }else if(iqInput.nextDouble()<100 && termMeanInput.nextDouble()<17){
            System.out.println("You have no discount");
        }
    }else{
        System.out.println("Please enter the right format");
    }
}

}

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Я думаю, это потому, что вы вызываете метод сканирования в условии if.

Не можете ли вы использовать один сканер и поместить отсканированное значение в переменную?

0 голосов
/ 01 июня 2018

Если мы используем один сканер вместо 2 и сохраняем входные данные,

import java.util.Scanner;

public class NestedIf {

public static void main(String[] args) {
    Double iq, mean;

    Scanner iqInput=new Scanner(System.in);
    System.out.println("Please enter your IQ: ");
    iq = iqInput.nextDouble();

    System.out.println("Please enter your term mean: ");
    mean = iqInput.nextDouble();


    if(iq != null && mean != null){

        if(iq>110 && mean>18){
            System.out.println("You got 30 percent discount.");

        }else if(iq>100 && mean>17){
            System.out.println("You got 20 percent discount.");

        }else if(iq<100 && mean<17){
            System.out.println("You have no discount");
        }
    }else{
        System.out.println("Please enter the right format");
    }
}

}
0 голосов
/ 01 июня 2018

Проблема: Здесь вы читаете значения из iqInput.nextDouble(); и termMeanInput.nextDouble();.Однако Вы не сохраняете их значения ни в каких переменных, чтобы использовать их в операторах if.

Попробуйте это:

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    try {
        System.out.print("Please enter your IQ: ");
        Double IQ = s.nextDouble(); // Modification 

        System.out.print("Please enter your term mean: ");
        Double termMean = s.nextDouble();

        if(IQ<100 && termMean<17) {
            System.out.println("You have no discount");
        } else if(IQ>110 && termMean>18) {
            System.out.println("You got 30 percent discount.");
        } else {
            System.out.println("You got 20 percent discount.");
        }
    }
    catch(InputMismatchException e) {
        System.out.println("Please enter the right input format.");
    }
}

Модификации:

  1. Добавлено Double IQ = iqInput.nextDouble(); and Double termMean = termMeanInput.nextDouble();.

  2. Используемые значения IQ and termMean в операторах if-else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...