Цикл Do-while не будет зацикливаться после оператора switch-case - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать некоторый код, который будет спрашивать пользователя, какую функцию он хочет выполнить (например, найти какой квадрант на графике является точкой и т. Д.). Но я также хочу, чтобы код попросил пользователя повторно ввести число, если оно не находится между 1 и 6 включительно. Я попытался сделать это путем создания цикла do-while, но по какой-то причине он даже не зацикливается. Любые советы о том, как сделать его короче / чище, приветствуются.

Вот то, с чем у меня проблемы:

  int whichMethod;
   do{ 
     whichMethod = scan.nextInt();
     switch(whichMethod){
       case 1:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point p = new Point(x, y);
         System.out.println("Quadrant:"+ p.quadrant());
         break;
       case 2:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case2p = new Point(x, y);
         case2p.flip();
         System.out.println("Flipped Coordinates" + case2p);
         break;
       case 3:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case3p = new Point(x, y);

         System.out.println("Enter x and y values for the 2nd Point: ");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case3p2 = new Point(x, y);
         System.out.println("Manhattan Distance:"+ 
         case3p.manhattanDistance(case3p2));
         break;
       case 4:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case4p = new Point(x, y);

         System.out.println("Enter x and y values for the 2nd Point: ");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case4p2 = new Point(x, y);
         System.out.println("Are they Vertical?: " + case4p.isVertical(case4p2));
         break;
       case 5:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case5p = new Point(x, y);

         System.out.println("Enter x and y values for the 2nd Point:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case5p2 = new Point(x, y);
         System.out.println("Slope is: " + case5p.slope(case5p2));
         break;
       case 6:
         System.out.println("Enter x and y values:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case6p = new Point(x, y);

         System.out.println("Enter x and y values for the 2nd Point:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case6p2 = new Point(x, y);

         System.out.println("Enter x and y values for the 3rd Point:");
         x = scan.nextDouble();
         y = scan.nextDouble();
         Point case6p3 = new Point(x, y);
         System.out.println("Are they Collinear?: "+ case6p.isCollinear(case6p2, case6p3));
         break;
       default:
         System.out.println("This isn't one of the methods available.");
         System.out.println("Please enter a number between 1 and 6");      
      } 

} while((whichMethod >= 1) && (whichMethod <= 6));

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Добавьте whichMethod = scan.nextInt () в качестве последней строки по умолчанию. Это позволит пользователю ввести действительный номер, если пользователь ввел неправильный номер.

0 голосов
/ 16 апреля 2019

Ваш цикл зацикливается только в том случае, если пользователь вводит VALID-номер вместо того, когда он вводит недопустимый номер.Делая подобные вещи, я склонен использовать наборы, чтобы логическая логика была легкой, даже после 2 дней без сна и 10 горшков холодного кофе:)

Set<Integer> validInputs = new Set();
validInputs.add(1);
validInputs.add(2);


do {
// your stuff here

} while (!validInputs.contains(inputMethod));

Если вы когда-нибудь отойдете отВзаимодействие с пользователем на основе консоли с набором допустимых значений поможет как в Swing, так и в JavaFX.

...