为了账号安全,请及时绑定邮箱和手机立即绑定

尝试使用带有“菜单”的 For-Loop

尝试使用带有“菜单”的 For-Loop

杨__羊羊 2022-11-30 13:42:25
初学者,请尽可能解释!一个课程问题要求我创建一个菜单(完成)。菜单上的多个选项给出不同的一次性结果(完成)。现在它要我实现一个for,while和do...while循环(无法理解)我真的尝试了我所有的基本知识,包括在循环内创建和填充数组for(事后看来这是一个愚蠢的想法)。public void displayMenu(){    System.out.println("A. Option #A");    System.out.println("B. Option #B");    System.out.println("C. Option #C");    System.out.println("D. Option #D");    System.out.println("X. Exit!");    System.out.println();    System.out.println("Please enter your choice:");}public void start(){    displayMenu();    Scanner console = new Scanner(System.in);    String input = console.nextLine().toUpperCase();    System.out.println();    switch (input)    {        case "A": System.out.println("Option #A was selected"); break;        case "B": System.out.println("Option #B was selected"); break;        case "C": System.out.println("Option #C was selected"); break;        case "D": System.out.println("Option #D was selected"); break;        case "X": System.out.println("You chose to Exit"); break;        default: System.out.println("Invalid selection made"); break;    }}public void startFor(){  /*Each of these methods will modify the original start() method, each    *will add a loop of the specific type so that the menu is displayed    *repeatedly, until the last option is selected. When the last option    *is selected, exit the method (i.e. stop the loop).   */}
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

for正如您在评论中要求的示例一样。


练习的重点似乎是在菜单上迭代,直到满足退出条件 ( "X".equals(input))。这意味着在for语句中的三个条件之间,这是您唯一需要指定的条件。这是因为(基本)for陈述的一般形式是


for ( [ForInit] ; [Expression] ; [ForUpdate] )

括号之间的这些术语都不是强制性的,因此我们也可以去掉[ForInit]and [ForUpdate](但保留分号)。这具有不初始化任何东西的效果,[ForInit]并且在循环的每次迭代结束时什么也不做[ForUpdate],让我们只检查表达式给出的退出条件[Expression](当它被评估为时false,循环退出)。


请注意,console是在循环外声明的,因为在每次迭代时都分配一个会很浪费。而且input,因为您在for声明的条件下需要它。


Scanner console = new Scanner(System.in);

String input = "";


for (;!"X".equals(input);) { // notice, the first and last part of the for loop are absent


    displayMenu();


    input = console.nextLine().toUpperCase();

    System.out.println();


    switch (input) {

        case "A": System.out.println("Option #A was selected"); break;

        case "B": System.out.println("Option #B was selected"); break;

        case "C": System.out.println("Option #C was selected"); break;

        case "D": System.out.println("Option #D was selected"); break;

        case "X": System.out.println("You chose to Exit"); break;

        default: System.out.println("Invalid selection made"); break;

    }

}

您可能会注意到这有点尴尬,因为这不是您通常使用for循环的目的。


无论如何,在这一点上,while版本变得微不足道 ( while (!"X".equals(input))) 并且在这种情况下,do...while也是等效的, ( do { ... } while (!"X".equals(input))) 因为相同的条件适用于当前循环的末尾和下一个循环的开始,并且有它们之间没有副作用。


顺便说一句,您可能会注意到while (condition)和for (; condition ;)在功能上是等效的,并且您可能会想知道为什么应该使用一个而不是另一个。答案是可读性。做的时候想做什么就清楚多了while (condition)。


查看完整回答
反对 回复 2022-11-30
?
PIPIONE

TA贡献1829条经验 获得超9个赞

for 循环中的所有参数都不是强制性的。定义一个停止标志并检查输入是否为“X”。每当输入是“X”时,只需更改 stopFlag 或只是简单地使用 break 语句来中断循环;



public void startFor()

    {

      boolean stopFlag = false;


      for(; stopFlag == false ;) {


        displayMenu();

        Scanner console = new Scanner(System.in);

        String input = console.nextLine().toUpperCase();

        System.out.println();


        switch (input)

        {

            case "A": System.out.println("Option #A was selected"); break;

            case "B": System.out.println("Option #B was selected"); break;

            case "C": System.out.println("Option #C was selected"); break;

            case "D": System.out.println("Option #D was selected"); break;

            case "X": System.out.println("You chose to Exit"); break;

            default: System.out.println("Invalid selection made"); break;

        }

        if(input.contentEquals("X"))

            stopFlag = true;

      }

    }


查看完整回答
反对 回复 2022-11-30
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信