【问题标题】:Store user input in Arraylist<String> until new line将用户输入存储在 Arraylist<String> 中,直到换行
【发布时间】:2015-09-03 09:10:15
【问题描述】:

问题需要为每个属性输入不同的值。例如:
颜色 黑色 白色
水冷热介质
风强弱
我制作了 ArrayList of ArrayList of String 来存储 no 之类的东西。每个属性的值不固定。用户输入黑白,在打新行时,程序必须开始获取 NEXT 属性(冷热介质)的值。没有。属性的数量已经指定。我在这里遵循了一些(几乎相关的)答案并编写了以下代码:

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 是我的 Scanner 对象。

【问题讨论】:

  • 所以你没有同时获得所有输入,程序必须在第一行之后等待接收更多输入,对吗?
  • 首先我的程序输出“输入属性1:”我输入“黑白”,但是在按下输入“输入属性2:永远不会出现。(无论我给出多少单词/换行符。)
  • 我可以使用 StringTokeniser 来做到这一点。这目前符合我的目的。我无法通过比较输入或使用 isEmpty() 等来弄清楚如何做到这一点。

标签: java string arraylist


【解决方案1】:

你应该阅读:

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

特别是声明的部分:

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

所以,如果用户输入一个空行,只有行分隔符\n,你会读到一个没有行分隔符的空行。

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

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

【讨论】:

    【解决方案2】:

    作为一个快速破解你可以做某事。喜欢

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

    不好,但它的工作原理。还请注意字符串连接中的计算。在您的代码中,它将打印 01、11、21 等。带括号就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多