int i = 3;
int j = 2;
int k = 1;
Printer printer = new Printer();
if (printer.getTotalAmount() > 0) {
if (printer.getType().equals("canon")) {
if (i >= j) {
i = i-j; // i=3-2, so i will be 1 now
}
}
if (printer.getType().equals("epson")) {
if (i >= k) {
i = i - k; // it should be i = 1-1 and i will be 0 now
}
}
}
我的问题是变量i
的值在前一个if
语句之后没有更新。由于块范围,变量i
的值仍为3.
我该如何解决这个问题?
答案 0 :(得分:0)
您的两个if
语句代表互斥条件。打印机的类型可以是" canon"或者它可以是" epson"。从来没有。因此,只会满足您的两个if
条件中的一个,并且只会执行两个代码块中的一个。
例如,假设您的打印机的类型是" epson"。当评估第一个条件时,它将检查" epson"等于"佳能"。由于它们不相等,因此条件的计算结果为false
,并且if () {/* code */}
块内的所有代码都被完全跳过。
导致问题的范围背后的理论并不准确:由于变量是在if
块之外声明的,因此更新后的值将反映在每个有权访问该变量的位置。 / p>
您需要更新您的逻辑,以便考虑到只会发生其中一个场景的事实,或者,如果只是简化代码,请找到一个类似于您的真实代码的更合适的场景。
如果仍然不清楚,if
声明中的Oracle tutorial可能会有所帮助。
答案 1 :(得分:0)
我认为您应该添加调试语句以了解有关程序流程的更多信息
因为你没有提到printer.getTotalAmount()
和printer.getType()
的价值
取决于i
的值。
e.g。
System.out.println("Total Amount:"+ printer.getTotalAmount());
if (printer.getTotalAmount() > 0) {
System.out.println("Type:"+ printer.getType());
if (printer.getType().equals("canon")) {
System.out.println("inside if canon");
if (i >= j) {
i = i-j; // i=3-2, so i will be 1 now
}
}
if (printer.getType().equals("epson")) {
System.out.println("inside if epson");
if (i >= k) {
i = i - k; // it should be i = 1-1 and i will be 0 now
}
}
}