0

我需要将用户输入文本文件的每一行(单个单词)的内容添加到数组中的单独元素中。*我知道 ArrayList 是解决此问题的更好数据结构,但我仅限于使用数组。

这是我的代码:

public static void main(String[] args) throws FileNotFoundException {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter a file name: ");
    System.out.flush();
    String filename = scanner.nextLine();
    File file = new File(filename);
    FileReader reader = new FileReader(file);
    try (BufferedReader buffReader = new BufferedReader(reader)) {
        String line;
        int i=0;
        String[] words = new String[10];
        while((line = buffReader.readLine()) != null) {
            words[i]=buffReader.readLine();
            System.out.println(words[i]);
            i++;
        }
    }
    catch(IOException e){
        System.out.println(e);
    }
}

输入文件很简单:

Pans 
Pots 
opt 
sit 
it's
snap

程序输出如下。它似乎正在跳过每隔一行。

Pots
sit
snap
4

5 回答 5

4

您每次while循环迭代读取两行,一个在while条件中,另一个在循环体的第一行。结果是每次迭代消耗两行,并且只打印两行中的第二行。

消除循环体中的第二个调用,这样每行就有一个循环迭代(和一个打印语句)。

于 2013-09-23T23:43:32.950 回答
1

如下所示更改 while 循环。如果检查 while 循环条件,则您正在读取该行,然后再次读取您的 while 循环的第一行中的行。因此,您正在阅读两行并仅打印一行。

 while((line = buffReader.readLine()) != null) {
        System.out.println(line );
        i++;
 }
于 2013-09-23T23:44:01.313 回答
0
public static void main(String[] args) throws FileNotFoundException {
    Scanner scanner = new Scanner(System.in);
    System.out.print("Enter a file name: ");
    System.out.flush();
    String filename = scanner.nextLine();
    File file = new File(filename);
    FileReader reader = new FileReader(file);
    try (BufferedReader buffReader = new BufferedReader(reader)) {
        String line;
        int i=0;
        String[] words = new String[10];
        //modify line = buffReader.readLine()
        while((words[i]=buffReader.readLine()) != null) {
                //modify //words[i]=buffReader.readLine();
            //words[i]=buffReader.readLine();
            System.out.println(words[i]);
            i++;
        }
    }
    catch(IOException e){
        System.out.println(e);
    }
}
于 2013-09-23T23:58:32.763 回答
0
while((line = buffReader.readLine()) != null)

该行读取并消耗了第一行输入,这就是为什么您看不到Pans和偶数索引输入的原因。

于 2013-09-23T23:46:07.650 回答
0

您可以使用 ArrayList 而不是使用 toArray 方法将其转换为 Array 吗?你有什么限制,为什么?

于 2013-09-23T23:52:41.230 回答