如何在此循环中传递所有整数并在最后一行之前停止

时间:2015-04-26 16:31:34

标签: java linked-list bufferedreader stringtokenizer parseint

这是我的输入

first line
5 6
3 4
2 3
2 5
1 0
word 2 2 4

我需要将所有整数添加到图形而不是最后一行(字1 2 4)..

我已将第一行(第一行等)拆分并将它们放入arraylist ..没有问题

然后我有这个for-loop

for (int i = 0; i < (amount of lines); i++) {
        StringTokenizer st = new StringTokenizer(in.readLine());
        graph.addEdge(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
    }

我无法在代码中写入多少次我希望它放置整数,因为我的代码应该通常与其他输入一起运行... 如何让它在最后一行之前停止,我仍然需要能够使用最后一个bufferreaderline

2 个答案:

答案 0 :(得分:2)

假设你总是有一个第一行来创建图形,而最后一行来做任何事情。您想要迭代以将边添加到图中的是第一个和最后一个之间的线。 我希望我猜对了。

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
List<String> lines = new ArrayList<>();
/* Iterating over the whole input first*/
while((line = in.readLine()) != null) {
    lines.add(line);
}

String firstLine = lines.get(0);
String lastLine = lines.get(lines.size() - 1);

StringTokenizer stok = new StringTokenizer(firstLine);
ArrayList<String> pax = new ArrayList<String>();
while(stok.hasMoreTokens()){
    pax.add(stok.nextToken());        
}

int v = pax.size();
Graaph graph = new Graaph(V);

/* Create the edges */
for (int i = 1; i < lines.size()-1; i++) {
    StringTokenizer st = new StringTokenizer(in.readLine());
    graph.addEdge(Integer.parseInt(st.nextToken()),  
        Integer.parseInt(st.nextToken()));
}

这假设你的输入不是空的,但我想你可以处理它。 我希望这会有所帮助。

答案 1 :(得分:0)

我只会使用try-catch

    ArrayList<Integer> nums = new ArrayList<Integer>();
    String lastLine = "";

    try {
        while ((lastLine = in.readLine()) != null) {

            StringTokenizer st2 = new StringTokenizer(lastLine);
            graph.addEdge(Integer.parseInt(st2.nextToken()), 
                          Integer.parseInt(st2.nextToken()));
        }
    }
    catch (NumberFormatException e) {}

    System.out.println(lastLine);