Как игнорировать ввод строки? - PullRequest
0 голосов
/ 12 октября 2019

У меня вопрос, как я могу сделать так, чтобы все входные данные, кроме числа int, игнорировались.

, например:

option 1 (add) "Введите два целых числа:"input: asdf (<- запрашивает, чтобы это игнорировалось) input: 1 input: 2 output: 3 </p>

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

предложения, советы и критика приветствуются.

заранее спасибо!

 public class MathTeacher {


  public static int addNumbers(int n1, int n2){
  int add = n1+n2;
  return add;
  }

  public static int subtractNumbers(int n1, int n2){
  int subs = n1-n2;
return subs;
  }

  public static int multiplyNumbers(int n1, int n2){
  int mulp = n1*n2;
return mulp;
  }

  public static int divideNumbers(int n1, int n2){
  int div = n1/n2;
  return div;
  }
  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    while(true) {
      int choices;
      System.out.println(
          "Welcome to *Mental Math Practice* where you can test your addition, subtraction, multiplication, and division.");
      System.out.println("Enter 1 to add the two numbers.");
      System.out.println("Enter 2 to subtract the second number from the first number.");
      System.out.println("Enter 3 to multiply the two numbers.");
      System.out.println("Enter 4 to divide the first number by the second number.");

      choices = scanner.nextInt();

      switch(choices){
        case 1: {
          System.out.println("Enter two integers: ");
          int n1 = scanner.nextInt();
          int n2 = scanner.nextInt();
          int add = addNumbers(n1,n2);
          System.out.println(add);
          continue;
        }
        case 2: {
          System.out.println("Enter two integers: ");
          int n1 = scanner.nextInt();
          int n2 = scanner.nextInt();
          int sub = subtractNumbers(n1,n2);
          System.out.println(sub);
          continue;
        }
        case 3: {
          System.out.println("Enter two integers: ");
          int n1 = scanner.nextInt();
          int n2 = scanner.nextInt();
          int mulp = multiplyNumbers(n1,n2);
          System.out.println(mulp);
          continue;
        }
        case 4: {
          System.out.println("Enter two integers: ");
          int n1 = scanner.nextInt();
          int n2 = scanner.nextInt();
          int div = divideNumbers(n1,n2);
          System.out.println(div);
          continue;
        }
      }
      System.out.println("Enter 'Quit' to end the program.");
    }

  }

}

Ответы [ 2 ]

0 голосов
/ 13 октября 2019

Если я правильно понял вопрос, вы хотели бы неоднократно запрашивать ввод у пользователя, пока он не предоставит целое число.

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

private static int getIntFromUser(Scanner scan) {
    int x = 0;
    while (true) {
        try {
            System.out.println("Enter an integer: ");
            x = scan.nextInt();
            break;
        } catch (InputMismatchException e) {
            scan.next();
        }
    }
    return x;
}

Теперь получение входных данных в каждом случае переключателя будет выглядеть примерно так:

int n1 = getIntFromUser(scan);
int n2 = getIntFromUser(scan);
0 голосов
/ 13 октября 2019

Если пользователю нужно только ввести целое число в качестве входных данных, попробуйте использовать цикл do while

do{
    //Ask for user input here
 }while(!scanner.hasNextInt());

Этот цикл должен продолжаться, если ввод не является целым числом.

...