【问题标题】:My program won't stop when I enter "done"当我输入“完成”时,我的程序不会停止
【发布时间】:2013-11-04 21:11:14
【问题描述】:

我之前问了一个问题,从那以后我稍微编辑了我的代码,但现在我的代码在我读入完成时不会停止它不会停止。

public class Done {

    public static void main(String[] args){

       Scanner kb = new Scanner(System.in);
       ArrayList<String> sal = new ArrayList<String>();
       int count = 0;
       while (true){
             sal.add(kb.next());
             if (sal.equals("done"))
                 break;
             count++;
      }
      display(sal);
      displayb(sal);
    }

    public static void display(ArrayList<String> sal){

       for (int i=0; i<sal.size(); i++)
            System.out.print(sal.get(i)+ " ");
       System.out.println();
     }

    public static void displayb(ArrayList<String> sal){

       for (int z = sal.size(); z >= 1; z--)
            System.out.print(sal.get(z-1) + " ");
       System.out.println();
    }
 }

当我输入短语“完成”时,我的代码不会停止。有谁知道我可能做错了什么?

【问题讨论】:

  • 你永远不应该使用 break 来结束循环......你应该反转你想要的语句并将它放在 while 循环中。
  • @Dom 对不起,我不知道你在哪里听到的,但这是胡扯。您不能总是将所需语句的! 放在while 条件中。你不能在这里做,因为你必须先做输入。而你能做到的唯一方法是编写输入调用kb.next() 两次,这是重复的代码,这是比break 更应该避免的事情。还有其他方法可以重写代码以避免break,但它们会降低可读性。

标签: java for-loop arraylist while-loop java.util.scanner


【解决方案1】:

您正在检查 ArrayList sal 是否等于字符串 "done" - 这永远不会是真的。也许您想检查最新输入是否等于该字符串:

while (true)
{
    String input = kb.next();

    if (input.equals("done"))
        break;

    sal.add(input);
    count++;
}

【讨论】:

  • @user2920249 尝试编辑后的代码(即,在添加到列表之前检查是否已完成)。
  • @nhgrif:这有什么好处?
  • @FredLarson 如果/当input 为空时,它不会抛出异常。在这种特定情况下,它可能永远不会为空,但养成这样写的习惯就好了。
  • @nhgrif 我一般不会对字符串使用 yoda 条件——如果我的字符串为空,我想知道它并尽早失败。
【解决方案2】:

kb.next() 是您要比较的字符串。您需要将其保存在变量中:

String inputString = kb.next();
if (inputString.equals("done"))
    break;
sal.add(inputString);

这样也可以解决数组中不添加"done"的问题。

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多