神秘的失踪换行

时间:2015-04-29 18:29:06

标签: java newline

我正在开发一个旨在解决位于以下网站的挑战问题的计划。 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=919

我相信我已经正确地解决了这个问题。我需要以特定的方式打印出我的答案。对于几乎所有测试输入,我的程序以正确的方式打印出响应。但是,对于以下站点给出的输入,我得到一个错误。 http://www.udebug.com/UVa/978

我在第137383行附近缺少换行符。

我应该:

1
1
1

green wins

我明白了:

1
1
1
green wins

我已经仔细检查了我的代码,无法弄清楚为什么会这样。它似乎不会发生在任何其他地方,即使是类似的输入。

以下是代码:

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Lem4 {
    static Comparator<Integer> c = new reverseC();
    static PriorityQueue<Integer> green = new PriorityQueue<Integer>(100002, c);
    static PriorityQueue<Integer> blue = new PriorityQueue<Integer>(100002, c);
    static int bf[][] = new int[100048][2];

    public static void main(String[] args) {
        Scanner in = new Scanner((System.in));
        int count = in.nextInt();
        StringBuilder t = new StringBuilder();
        while (count-- > 0) {
            int fields = in.nextInt();
            int numGreen = in.nextInt(); // SG
            int numBlue = in.nextInt(); // SB

            for (int i = 0; i < numGreen; i++) {
                green.add(in.nextInt());
            }
            for (int i = 0; i < numBlue; i++) {
                blue.add(in.nextInt());
            }
            while (!green.isEmpty() && !blue.isEmpty()) {
                int battles = 0;
                int diff = 0;
                while (!green.isEmpty() && !blue.isEmpty() && battles < fields) {
                    bf[battles][0] = green.peek();
                    green.poll();
                    bf[battles][1] = blue.peek();
                    blue.poll();
                    ++battles;
                }
                for (int i = 0; i < battles; ++i) {
                    diff = bf[i][0] - bf[i][1];
                    if (diff > 0)
                        green.add(diff);
                    else if (diff < 0)
                        blue.add(-1 * diff);
                }

            }

            if (!green.isEmpty()) {
                t.append("green wins" + "\n");
                while (!green.isEmpty()) {
                    t.append(green.peek());
                    t.append('\n');
                    green.poll();
                }
            } else if (!blue.isEmpty()) {
                t.append("blue wins" + "\n");
                while (!blue.isEmpty()) {
                    t.append(blue.peek());
                    t.append('\n');
                    blue.poll();
                }
            } else {
                t.append("green and blue died\n");
            }
            if (count > 1)
                t.append("\n");
        }
        System.out.print(t);
    }

    public static class reverseC implements Comparator<Integer> {

        @Override
        public int compare(Integer x, Integer y) {
            if (x > y)
                return -1;
            else if (x < y)
                return 1;
            else
                return 0;
        }

    }
}

有没有人知道这里发生了什么?

0 个答案:

没有答案