【问题标题】:While-loop RestrictionWhile 循环限制
【发布时间】:2016-12-21 15:37:58
【问题描述】:

我想限制 while 循环。

我不想用break;,而是说循环必须在3次后结束。

我的while循环:

while(!file.isFile()) { userInput = JOptionPane.showInputDialog("UserInput);

【问题讨论】:

    标签: java loops while-loop restriction


    【解决方案1】:
    int i = 0;
    while(!file.isFile() && i < 3) {
      userInput = JOptionPane.showInputDialog("UserInput);
      i++;
    }
    

    我同意 for 循环是更好的选择 :)

    【讨论】:

    • 我很喜欢这种方式;特别是如果你用范围阻止整个事情。
    • @Bathsheba 不过,它实际上只是声明 for 循环的一种丑陋方式。
    • 确实,但这在许多方面代表了与 OP 当前所拥有的最简单的偏差。
    【解决方案2】:

    改用 for 循环:

    for (int i = 0; i < 3 && !file.isFile(); i++) {
        userInput = JOptionPane.showInputDialog("UserInput");
        ...
    }
    

    【讨论】:

    • 哈哈,我认为你赢了做合乎逻辑的事情,做的事情,而不仅仅是用while来回答:P
    • @natus 我认为这可以讨论。是的,使用 for 循环进行计数是一种更常见的做法;但另一方面,将类似“while”的条件放入 for 循环中......不是。我认为许多遇到这样的 for 循环的程序员可能会忽略第二个条件。因此,在我看来,遇到错误的可能性更高。仅仅是因为人们在看到 while 循环时会有不同的期望。
    • @GhostCat 公平通话 :)
    【解决方案3】:
    int i = 3;
    
    while(!file.isFile() && i>0) { 
       userInput = JOptionPane.showInputDialog("UserInput");
       i--;
    }
    

    【讨论】:

      【解决方案4】:

      然后你需要让你的 while 循环成为一个类似 for 循环的东西:

      int counter = 0;
      
      while (counter < 3 && !file.isFile()) { ...
        counter++;
      

      郑重声明:您展示的代码实际上并没有什么用处:您正在“覆盖”您从用户那里获得的输入;并且:您是条件 !file.isFile() ...不会更改它的值 ...因为没有代码可以做到这一点。换句话说:除了你循环的方式之外,你的代码还有更多需要修复的地方。向用户询问三遍同样的事情似乎很奇怪;忽略他前两次所说的话。

      【讨论】:

        【解决方案5】:
        int count = 0;
        while(!file.isFile() && count < 3 ) { 
           count++;
        }
        

        【讨论】:

          【解决方案6】:
          int counter = 0;
          while(!file.isFile() && counter < 3) { 
             userInput = JOptionPane.showInputDialog("UserInput);
             counter++;
          }
          

          将3 替换为您希望循环限制的迭代次数。

          【讨论】:

            【解决方案7】:

            考虑重构为for 循环,在紧凑的范围内引入一个计数器变量:

            for (int i = 0; i < 3 && !file.isFile(), ++i){
                userInput = JOptionPane.showInputDialog("UserInput"/*ToDo - quotation inserted*/);
            }
            

            for 循环条件检查 i &lt; 3 &amp;&amp; !file.isFile() 在循环体中的语句运行之前验证。

            【讨论】:

              猜你喜欢
              • 2017-08-26
              • 2015-06-25
              • 2014-03-29
              • 2012-12-24
              • 2021-02-20
              • 2012-11-10
              • 2016-08-27
              • 2011-09-26
              • 2015-04-29
              相关资源
              最近更新 更多