Java:带扫描仪的阵列清单:第一个元素不打印



i试图制作一个程序,该程序在ArrayList中打印出用户输入的值,并且在大多数情况下,它有效。除了它不打印第一个元素。这是代码:

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);
    }
}

例如,如果我输入杰克,鲍勃,莎莉,它将打印[鲍勃,莎莉]

输入循环时,您会立即调用nextLine(),在此过程中失去先前输入的线路。在阅读其他值之前,您应该使用它:

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

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

int location = names.indexOf("done");
names.remove(location);
String x=in.nextLine();

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

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

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);
}

因为第一个元素是第一个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);
        }

相关内容

  • 没有找到相关文章

最新更新