将用户输入存储在Arraylist <string>中直到换行

时间:2015-09-03 09:10:16

标签: java string arraylist

问题需要为每个属性输入不同的值.Ex:
颜色黑色白色
水冷热媒
风强弱 我创建了String的ArrayList的ArrayList来存储no之类的东西。每个属性的值都不固定。用户输入Black White,在点击新行时,程序必须开始取NEXT属性值(Cool Hot Medium)。已经指定了属性。我在这里遵循了一些(几乎相关的)答案,并编写了以下代码:

ArrayList<ArrayList<String>> attributes = new ArrayList<ArrayList<String>>();
    String input;
    for(i=0; i<num_of_Attributes ;i++)
    { System.out.print(" Enter attribute no." + i+1 + " : ");
     ArrayList<String> list = new ArrayList<String>();
     while(! input.equals("\n"))
    {
        list.add(input);
        input = sc.nextLine(); 
    }
     attributes.add(list);
    }


该程序打印“输入属性1:”,但即使在换行后它也不会打印“输入属性2:”。它会进入无限循环。我怎样才能达到程序要求的目的? sc是我的扫描仪对象。

2 个答案:

答案 0 :(得分:0)

你应该阅读:

http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine%28%29

具体说明:

  

此方法返回当前行的其余部分,不包括末尾的任何行分隔符

因此,如果用户仅使用行分隔符\n输入空行,您将读取没有此行分隔符的空行。

检查while (!input.isEmpty())或更好的while (!input.trim().isEmpty())

作为一般规则,您可以调试程序(甚至只是打印input)以试图找出您正在检查的实际值。

答案 1 :(得分:0)

作为快速黑客,你可以做某事。像

    for (i = 0; i < num_of_Attributes; i++) {
        input = " ";
        System.out.print(" Enter attribute no." + (i + 1) + " : ");
        ArrayList<String> list = new ArrayList<String>();
        while (!input.isEmpty()) {
            list.add(input);
            input = sc.readLine();
        }
        attributes.add(list);
    }

不好但是有效。请注意在String concaternation中计算。在您的代码中,它将打印01,11,21等。用括号可以工作。