Java:具有扫描程序的ArrayLists:第一个元素不打印

时间:2017-03-02 20:04:10

标签: java arraylist while-loop java.util.scanner user-input

我试图制作一个程序,在import java.util.Scanner; import java.util.ArrayList; public class Family { public static void main(String[] args){ ArrayList<String> names=new ArrayList<String>(); Scanner in=new Scanner(System.in); System.out.println("Enter the names of your immediate family members and enter \"done\" when you are finished."); String x=in.nextLine(); while(!(x.equalsIgnoreCase("done"))){ x = in.nextLine(); names.add(x); } int location = names.indexOf("done"); names.remove(location); System.out.println(names); } } 中打印出用户输入的值,并且在大多数情况下,它可以正常工作。除了它不打印第一个元素。这是代码:

{{1}}

例如,如果,我输入jack,bob,sally,它会打印[bob,sally]

3 个答案:

答案 0 :(得分:4)

当您进入循环时,您立即呼叫nextLine(),在此过程中丢失先前输入的行。您应该在阅读其他值之前使用它:

while (!(x.equalsIgnoreCase("done"))) {
    names.add(x);
    x = in.nextLine();            
}

编辑:
当然,这意味着"done"不会添加到names,因此以下行应删除它们:

int location = names.indexOf("done");
names.remove(location);

答案 1 :(得分:1)

String x=in.nextLine();

while loop之外的这一行消耗了第一个输入,因为当您输入while loop时,再次调用x=in.nextLine();而不保存第一个输入,因此它会丢失。因此它不会被打印,因为它不在ArrayList

只需删除String x=in.nextLine();之前包含的while loop,您的代码即可正常使用。

String x="";

System.out.println("Enter the names of your immediate family members and enter \"done\" " +
"when you are finished.");

while(!(x.equalsIgnoreCase("done"))){
    x = in.nextLine();
    names.add(x);
}

答案 2 :(得分:0)

因为第一个元素由第一个x= in.nextLine();使用,而您从未将其添加到列表中。

试试这个:

 System.out.println("Enter the names of your immediate family members and enter \"done\" when you are finished.");
        String x="";
        while(!(x.equalsIgnoreCase("done"))){
            x = in.nextLine();
            names.add(x);

        }