【发布时间】:2013-11-25 04:10:57
【问题描述】:
我正在开发一个交换系统,用户正在设置交换的价格和数量。
我想确保交换不大于 Integer 最大值,但我遇到了问题。
当兑换金额设置为9或更多时,即使我有检查以确保该数字不大于最大值,它也不起作用。我做了一些调试,当价格为 2,147,483,646(比最大数字少 1)时将金额设置为 9,它会打印出以下内容:
2,147,483,630 - 9
这是我的调试代码,我应该添加什么以确保不会发生这种情况?
public void setPrimaryAmount(int primaryAmount) {
int price = primaryAmount * this.price;
System.out.println(Misc.format(this.price * primaryAmount) + " - " + primaryAmount);
if (price > Integer.MAX_VALUE ||
price == Integer.MAX_VALUE ||
price >= Integer.MAX_VALUE ||
price < 0 || price <= 0 ||
price++ == Integer.MAX_VALUE) {
System.out.println("Attempted to set a bad amount.");
return;
}
this.primaryAmount = primaryAmount;
}
“尝试设置错误的金额”会打印出来,直到您输入的金额 >= 9。
【问题讨论】:
-
你确实意识到,我希望,像
price < 0 || price <= 0这样的测试是多余的:price <= 0是完全足够的。price > Integer.MAX_VALUE || price == Integer.MAX_VALUE || price >= Integer.MAX_VALUE也是如此,除了一个整数变量永远不能大于Integer.MAX_VALUE的额外问题,所以你只需要price == Integer.MAX_VALUE。
标签: java integer max stack-overflow