当Queue有数据时,为什么我的输出打印为空?

时间:2014-10-26 21:40:40

标签: java queue

我试图让一个程序根据两个范围变量打印一个方程的答案x次。我创建了一个队列变量,它在进入for循环之前会保存一个等式。在我的for循环中,我创建了队列的备份版本,因为当我将它发送到另一个方法时,它会从该队列中删除值,最终让我留下一个空队列。我在方法中使用该备份,然后将其重新声明为for循环顶部的原始队列。

我的问题是,它一次给我所需的输出,然而,每次之后,它打印出null。我的猜测是因为它认为队列是空的但我不明白为什么。下面是我的主文件代码,应该就够了。

public class Main {

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.print("Infix Expression: ");
    String expression = keyboard.nextLine();
    GenericQueue<Token> result = new GenericQueue<Token>();

    Scanner keyboard2 = new Scanner(System.in);
    System.out.print("Range: ");
    String range = keyboard2.nextLine();

    int start = 0;
    int end = 5;
    String var = "x";

    Process.toPostfix(expression, result);

    for (int i=start; i<=end; i++) {
        GenericQueue<Token> backup_result = result;
        System.out.println(backup_result.toString());
        Rational answer = Process.evaluate(backup_result, i, var);
        System.out.println(i + "    " + answer);
    }

    keyboard.close();
    keyboard2.close();
    }
}

这是我的输出:

    Infix Expression: (5+x)
Range: f
 5 x +
0    5

1    null

2    null

3    null

4    null

5    null

1 个答案:

答案 0 :(得分:1)

写作时

GenericQueue<Token> backup_result = result;

你实际上并没有复制队列,而只是一个引用。您对result所做的任何更改都会反映在backup_result中,反之亦然。你只有一个队列,有两个名字。

这只是其中一个问题......另一个问题是,如果您需要将队列复制到备份中,那么您就会想到错误的队列方式:它们是针对队列的一部分而设计的你的代码把东西放进去,另一个去除它们并处理它们。