Java 数据结构在排序的有限项上有问题
我在Java中使用这些数据结构,我知道如何对数组中的项或对象进行排序。我想让一些单词按特定顺序排列,我可以使用Bufferedreader HashMap,ArrayList。我想做的是在读取前42行之后的任何时候,如果某行为空,即长度为0的字符串,则输出在该行之前42行出现的行。还有,如何改变这个程序,一次读取整个输入行,然后输出偶数行,从第一行开始,第0行,然后是奇数行..我发布了到目前为止的代码Java 数据结构在排序的有限项上有问题,java,data-structures,Java,Data Structures,我在Java中使用这些数据结构,我知道如何对数组中的项或对象进行排序。我想让一些单词按特定顺序排列,我可以使用Bufferedreader HashMap,ArrayList。我想做的是在读取前42行之后的任何时候,如果某行为空,即长度为0的字符串,则输出在该行之前42行出现的行。还有,如何改变这个程序,一次读取整个输入行,然后输出偶数行,从第一行开始,第0行,然后是奇数行..我发布了到目前为止的代码 public static void doIt(BufferedReader r, Print
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);
}
}
我不确定我是否正确理解了您的问题,但我希望这能有所帮助: 对于在空行之前打印42行的行,您可以保留一个计数器,一旦找到长度为零的行,输出索引计数器为-42的行,这里可能会出现一个off by one错误
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)