【问题标题】:JAVA: How to enter an undefined number of values to a stringarray using a scanner?JAVA:如何使用扫描仪向字符串数组输入未定义数量的值?
【发布时间】:2014-10-26 20:28:40
【问题描述】:

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

但我认为我需要对 for 循环做更多的事情。

如果有人可以给我一个很棒的解决方案!但是,如果您还可以解释为使其正常工作所做的修改,那会更好

【问题讨论】:

  • in.nextLine() 如果不在循环内,如何获得超过 1 行?
  • 你应该调用你的列表names,所以你可以使用name作为for-each变量。对集合使用复数通常更清楚。
  • 感谢您的提示!我已经重命名了我的变量

标签: java arraylist


【解决方案1】:

这是一个循环的例子。

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

    }
}

【讨论】:

    【解决方案2】:

    这是一个例子。在 Unix 系统上,Control-z 在后台放置一些东西。您的意思是 control-d 通常意味着输入结束吗?如果是这样,以下示例将起作用。关键是控制字符不会发送给您的应用程序,而是由终端解释。但是,如果您将 System.in 包装在 BufferedReader 中,则 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 ReadNames
    Enter a name: dave
    john
    bill
    <control-d here>
    Name: dave
    Name: john
    Name: bill
    

    【讨论】:

      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      相关资源
      最近更新 更多