使用BufferedReader的readline()输入arraylist

时间:2016-07-29 16:34:02

标签: collections readline

我正在尝试接受输入并使用BufferedReader将它们添加到arraylist中。 代码正在进行无限输入,并且它没有进一步向更多行(不退出for循环)。 请找到我的以下代码:

public class ALinput {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int n2 = br.read();// number of items in the list

            ArrayList<String> list2 = new ArrayList<String>();
            for(int i =1;i<=n2;++i)
            {
                list2.add(br.readLine());
            }

            System.out.println(list2);//printing list before sorting
            Collections.sort(list2);//sorting the list
            System.out.println("After sorting "+list2);

}
}

我已将n2作为数组列表中的元素数量。 如果输入n2 = 5; readLine在向arraylist添加5个字符串后不断退出时继续进行文本输入。 它不会出现在for循环中。请帮我理解我在这里做的错误。

1 个答案:

答案 0 :(得分:0)

实际上它不会永远存在,零的字符代码是48,一个是49,两个是50,依此类推。因此,当您输入5时,计算机会读取它的字符值,并将n2存储为53,然后让您键入52个输入。为什么52而不是53? 还有第二个错误,br.read()只查看输入的第一个字节,因此只有一个字符。第一次调用br.readLine()时,它会在您键入的第一个数字后读取该行上的内容。要解决这些问题,只需更改

即可
int n2 = br.read();

int n2 = Integer.parseInt(br.readLine());
瞧,瞧!完成了! 附:你可能想在try catch块中包围Integer.parseInt(),以防用户输入除数字之外的东西。