Java 我的项目赢了';“当我进入时,不要停止”;“完成”;

Java 我的项目赢了';“当我进入时,不要停止”;“完成”;,java,for-loop,arraylist,while-loop,java.util.scanner,Java,For Loop,Arraylist,While Loop,Java.util.scanner,我之前问过一个问题,从那以后我对代码进行了一些编辑,但现在当我读入done时,代码不会停止,它不会停止 public class Done { public static void main(String[] args){ Scanner kb = new Scanner(System.in); ArrayList<String> sal = new ArrayList<String>(); int count = 0

我之前问过一个问题,从那以后我对代码进行了一些编辑,但现在当我读入done时,代码不会停止,它不会停止

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();
    }
 }
公共类已完成{
公共静态void main(字符串[]args){
扫描仪kb=新扫描仪(System.in);
ArrayList sal=新的ArrayList();
整数计数=0;
while(true){
sal.add(kb.next());
如果(sal.equals(“done”))
打破
计数++;
}
显示器(sal);
b(sal);
}
公共静态无效显示(ArrayList sal){
对于(int i=0;i=1;z--)
系统输出打印(sal.get(z-1)+”);
System.out.println();
}
}

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

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

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

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

    sal.add(input);
    count++;
}
kb.next()
是要比较的字符串。您需要将其保存在变量中:

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

这也将解决不向数组中添加
“done”
的问题。

@user2920249尝试编辑的代码(即,在添加到列表之前只检查是否已完成)。@nhgrif:这有什么好处?@FredLarson如果
输入
为空,它不会引发异常。在这种特定的情况下,它可能永远不会为null,但有这样写的习惯是很好的。@nhgrif我通常不在字符串中使用yoda条件——如果我的字符串为null,我想知道它并尽早失败。你不应该使用break来结束循环。。。你应该把你想要的语句颠倒过来,放到while循环中。@Dom对不起,我不知道你从哪里听到的,但这是胡说八道。你不能总是把
while
条件下所需语句的code>。你不能在这里做,因为你必须先做输入。唯一的方法是编写两次输入调用
kb.next()
,这是重复的代码,这是应该避免的,而不仅仅是
break
。还有其他方法可以重写代码以避免
中断
,但它们会降低代码的可读性。