簡體   English   中英

在switch-case語句之后,do-while循環不會循環

[英]Do-while loop won't loop after switch-case statement

我正在嘗試制作一些代碼,詢問用戶他們想要完成哪些功能(例如在圖表上查找哪個象限,等等)。 但我也希望代碼要求用戶重新輸入一個數字,如果它不在1和6之間(包括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天和10盆冷咖啡后:)

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


do {
// your stuff here

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

如果您遠離基於控制台的用戶交互,擁有一組有效值將有助於swing和JavaFX。

將whichMethod = scan.nextInt()添加為默認的最后一行。 如果用戶輸入的號碼不正確,這將允許用戶輸入有效號碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM