首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Do-while循环不会在switch-case语句之后循环

Do-while循环不会在switch-case语句之后循环
EN

Stack Overflow用户
提问于 2019-04-16 08:49:56
回答 2查看 70关注 0票数 0

我正在尝试编写一些代码来询问用户他们想要完成什么功能(例如查找一个点在图形上的哪个象限,等等)。但我也希望代码要求用户重新输入一个数字,如果它不是介于1和6之间(包括1和6)。我试图通过创建一个do-while循环来做到这一点,但由于某些原因,它甚至不会循环。任何让它变得更短/更整洁的技巧都会得到很好的评价。

下面是我遇到的问题:

代码语言:javascript
复制
  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));
EN

回答 2

Stack Overflow用户

发布于 2019-04-16 09:04:36

只有当用户输入有效的数字而不是输入无效的数字时,才会出现循环循环。在做这类事情时,我倾向于使用集合,所以布尔逻辑很容易,即使在2天没有睡觉和10壶冰咖啡之后也是如此:)

代码语言:javascript
复制
Set<Integer> validInputs = new Set();
validInputs.add(1);
validInputs.add(2);


do {
// your stuff here

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

如果您曾经远离基于控制台的用户交互,那么拥有一组有效的值在swing和JavaFX中都会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-04-16 09:26:08

添加whichMethod = scan.nextInt()作为默认值中的最后一行。如果用户输入了错误的号码,这将允许用户输入有效的号码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55699078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档