0

我真的希望有人可以在这里帮助我。我对 Java 还是很陌生,我花了几个小时试图弄清楚如何做到这一点。我有一个循环来提示用户将文本(字符串)输入到数组列表中,但是,我无法弄清楚如何结束循环并显示他们的输入(我希望当他们使用空白文本字段按“输入”时发生这种情况。这就是我所拥有的 - 提前谢谢你!

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Ex01 {

    public static void main(String[] args) throws IOException {

        BufferedReader userInput = new BufferedReader(new InputStreamReader(
            System.in));

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

        myArr.add("Zero");
        myArr.add("One");
        myArr.add("Two");
        myArr.add("Three");

        do {
            System.out.println("Enter a line of text to add to the array: ");

            String textLine = userInput.readLine();
            myArr.add(textLine);
        } while (userInput != null);

        for (int x = 0; x < myArr.size(); ++x)
            System.out.println("position " + x + " contains the text: "
                    + myArr.get(x));
    }
}
4

2 回答 2

2

null变量和空字符串之间存在差异。null变量是不引用任何内容的变量。空字符串是位于内存某处的长度为 0 的字符串,变量可以引用这些字符串。

readLinenull仅在到达流的末尾时才返回(请参阅文档)。对于标准输入,这在程序运行时不会发生。

更重要的是,您正在检查BufferedReaderwill 是否是null,而不是它读取的字符串(这永远不会发生)。

并且更改代码只是检查字符串是否为空的问题是它仍然会被添加到ArrayList(在这种情况下这不是特别大的问题 - 它可以被删除,但在其他情况下字符串将被处理,在这种情况下,如果它是空的,那将是一个问题)。

有一些解决方法:

他们以 hack-y 方式,然后删除最后一个元素:

// declare string here so it's accessible in the while loop condition
String textLine = null;
do
{
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
    myArr.add(textLine);
}
while (!textLine.isEmpty());
myArr.remove(myArr.size()-1);

循环条件中的赋值方式:

String textLine = null;
System.out.println("Enter a line of text to add to the array: ");
while (!(textLine = userInput.readLine()).isEmpty())
    myArr.add(textLine);
    System.out.println("Enter a line of text to add to the array: ");
} ;

做两次的方法:

System.out.println("Enter a line of text to add to the array: ");
String textLine = userInput.readLine();
while (!textLine.isEmpty())
    myArr.add(textLine);
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
};

打破一切的中间方式(通常不建议 -break通常首选避免):

String textLine = null;
do
{
    System.out.println("Enter a line of text to add to the array: ");
    textLine = userInput.readLine();
    if (!textLine.isEmpty())
        break;
    myArr.add(textLine);
}
while (true);
于 2013-09-28T00:31:08.837 回答
0
while (!textLine.isEmpty())

userInput永远不会null

于 2013-09-28T00:45:22.620 回答