我试图让一个程序根据两个范围变量打印一个方程的答案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
答案 0 :(得分:1)
写作时
GenericQueue<Token> backup_result = result;
你实际上并没有复制队列,而只是一个引用。您对result
所做的任何更改都会反映在backup_result
中,反之亦然。你只有一个队列,有两个名字。
这只是其中一个问题......另一个问题是,如果您需要将队列复制到备份中,那么您就会想到错误的队列方式:它们是针对队列的一部分而设计的你的代码把东西放进去,另一个去除它们并处理它们。