JAVA:如何使用扫描仪向stringarray输入未定义数量的值?

JAVA:如何使用扫描仪向stringarray输入未定义数量的值?,java,arraylist,Java,Arraylist,我是Java新手,我正在制作一个程序,可以获取许多名称并将它们放入ArrayList,然后打印出名称。我希望用户按ctrl-Z键指示列表的结尾。到目前为止,我有: ArrayList<String> name = new ArrayList<>(); System.out.print("Enter a name: "); Scanner in = new Scanner(System.in); name.add(in.next());

我是Java新手,我正在制作一个程序,可以获取许多名称并将它们放入ArrayList,然后打印出名称。我希望用户按ctrl-Z键指示列表的结尾。到目前为止,我有:

    ArrayList<String> name = new ArrayList<>();
    System.out.print("Enter a name: ");
    Scanner in = new Scanner(System.in);
    name.add(in.next());
    in.nextLine().equals("");

    for(String naam: name){
        System.out.println(naam);
    }
ArrayList name=new ArrayList();
System.out.print(“输入名称:”);
扫描仪输入=新扫描仪(系统输入);
name.add(in.next());
in.nextLine()等于(“”);
for(字符串naam:名称){
系统输出打印LN(naam);
}
但我认为我需要对for循环做更多的工作


如果有人能给我一个解决方案,那就太好了!但是,如果您还可以解释为使其正常工作而修改的内容,那么还有什么更好的方法呢

public class Scan {
    public static void main(String[] args) {

        ArrayList<String> arrayList = new ArrayList<String>();

        Scanner sc = new Scanner(System.in);
        boolean testContinue = true;

        while (testContinue) {

            System.out.println("Input a string :");
            String str = sc.next();

            if (str.equals("quit"))
                testContinue = false;
            else {
                /*
                 * add to arrayList
                 */
                arrayList.add(str);
                testContinue = sc.hasNextLine();
            }
        }

        /*
         * Display arrayList
         */
        for(int i = 0; i<arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }

    }
}
公共类扫描{
公共静态void main(字符串[]args){
ArrayList ArrayList=新的ArrayList();
扫描仪sc=新的扫描仪(System.in);
布尔testContinue=true;
while(testContinue){
System.out.println(“输入字符串:”);
字符串str=sc.next();
如果(str.equals(“退出”))
testContinue=false;
否则{
/*
*添加到arrayList
*/
arrayList.add(str);
testContinue=sc.hasNextLine();
}
}
/*
*显示阵列列表
*/

对于(int i=0;i这里有一个例子。在Unix系统上,Control-z将一些东西放在后台。您是指Control-d,它通常意味着输入结束吗?如果是这样,下面的示例将起作用。关键是控制字符不会发送给您的应用程序,而是由终端进行解释。但是,如果您将System.in包装在BufferedArea中der,则BufferedReader将在EOF上返回null,这将停止扫描仪

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ReadNames {

    public static void main(String args[]) throws Exception {
        List<String> names = new ArrayList<String>();

        System.out.print("Enter a name: ");
        Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));

        while( in.hasNext() ){
            String n = in.next();
            if( n.isEmpty() ){
                break;
            }
            names.add(n);
        }

        for(String name: names){
            System.out.println("Name: " + name);
        }
    }
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共类ReadNames{
公共静态void main(字符串args[])引发异常{
列表名称=新的ArrayList();
System.out.print(“输入名称:”);
扫描仪输入=新的扫描仪(新的BufferedReader(新的InputStreamReader(System.in));
while(在.hasNext()中){
字符串n=in.next();
如果(n.isEmpty()){
打破
}
名称。添加(n);
}
for(字符串名称:名称){
System.out.println(“名称:”+Name);
}
}
}
运行示例:

$ java ReadNames
Enter a name: dave
john
bill
<control-d here>
Name: dave
Name: john
Name: bill
$java ReadNames
输入一个名称:dave
厕所
账单
姓名:戴夫
姓名:约翰
姓名:比尔

in.nextLine()
如果不在循环中,如何获得多于1行的数据?您应该调用列表的
名称
,这样您就可以使用
名称
作为每个变量的名称。对于集合使用复数通常更清晰。谢谢提示!我已经重命名了变量