1

我在 Java 中玩弄这样的数据结构,我想出了如何对数组或对象上的项目进行排序。我希望某些单词按特定顺序排列,我可以使用 Bufferedreader HashMap、ArrayList。我想要做的是在阅读前 42 行之后的任何时候,如果某行是空白的(即长度为 0 的字符串),则输出在该行之前出现 42 行的行。另外,如何更改此程序以一次读取整个输入一行,然后输出偶数行(从第一行第 0 行开始),然后是奇数行。我发布了我拥有的代码远的。

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {

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

    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        s.add(line);
        n++;
    }
    Collections.sort(s);

    Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }
}


public static void main(String[] args) {
    try {
        BufferedReader r;
        PrintWriter w;
        if (args.length == 0) {
            r = new BufferedReader(new InputStreamReader(System.in));
            w = new PrintWriter(System.out);
        } else if (args.length == 1) {
            r = new BufferedReader(new FileReader(args[0]));
            w = new PrintWriter(System.out);                
        } else {
            r = new BufferedReader(new FileReader(args[0]));
            w = new PrintWriter(new FileWriter(args[1]));
        }
        long start = System.nanoTime();
        doIt(r, w);
        w.flush();
        long stop = System.nanoTime();
        System.out.println("Execution time: " + 10e-9 * (stop-start));
    } catch (IOException e) {
        System.err.println(e);
        System.exit(-1);
    }
}
4

1 回答 1

0

我不确定我是否正确理解了您的问题,但我希望这会有所帮助:

为了打印在空行之前出现 42 行的行,您可以只保留一个计数器,一旦找到长度为零的行,输出具有索引的行counter - 42(我可能在这里有一个错误)

     int n = 0;
        while ((line = r.readLine()) != null) {
            if (n > 42 && s.length == 0)
                 System.out.println(s[n-42]);            
            s.add(line);
            n++;
        }

对于先打印偶数行然后打印奇数行,您可以尝试一次读取两行,将第一行保存到 ArrayList 中,将第二行保存到不同的行中。

最后,一个将有奇数行,一个将有偶数行。

还有最后一个注意事项,而不是使用这个:

 Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }

你可以简单地使用这个:

for( String line : s)
    System.out.println(line)
于 2013-10-01T21:27:11.067 回答