Java 我为什么要把楠送回来?

Java 我为什么要把楠送回来?,java,object,Java,Object,这5个类组成了一个“购物车”,我在ShoppingTest.java中创建了一些商品,其中一些商品可能有大宗价格。我已经调试了好几次,我不明白为什么NaN会被返回!非常感谢您的帮助,谢谢。 我知道它在这里:bulkPrice=bulkPrice/bulkAmount 我想得到一些关于如何绕过非数字问题的帮助,但仍然实现上面和下面的代码。 (运行购物测试) 公共类购物测试{ 公共静态void main(字符串[]args){ 项目sillyPutty=新项目(“傻油灰”,3.95,10,19.99

这5个类组成了一个“购物车”,我在ShoppingTest.java中创建了一些商品,其中一些商品可能有大宗价格。我已经调试了好几次,我不明白为什么NaN会被返回!非常感谢您的帮助,谢谢。 我知道它在这里:
bulkPrice=bulkPrice/bulkAmount
我想得到一些关于如何绕过非数字问题的帮助,但仍然实现上面和下面的代码。
(运行购物测试)

公共类购物测试{
公共静态void main(字符串[]args){
项目sillyPutty=新项目(“傻油灰”,3.95,10,19.99);
项目sillyString=新项目(“愚蠢的字符串”,3.5、10、14.95);
项目瓶装气泡=新项目(“瓶子o气泡”,0.99);
项目任天堂Wii=新项目(“任天堂Wii系统”,389.99);
项目马里奥=新项目(“马里奥计算机科学派对2(Wii)”,49.99);
物品jamChallenge=新物品(“Don Knuth代码Jam Challenge(Wii)”,49.99);
项目计算机科学笔=新项目(“计算机科学笔”,3.4);
项目rubiksCube=新项目(“魔方”,9.1);
项目计算机科学芭比=新项目(“计算机科学芭比”,10.99);
Item button=新项(“\'Java规则!\'button”,.99,10,5);
Item bumperSticker=新项目(“\'Java Rules'保险杠贴纸“,.99,20,8.95);
目录目录=新目录(“RHS目录”);
目录。添加(硅腻子);
目录.添加(sillyString);
添加(瓶装气泡);
目录添加(任天堂Wii);
目录。添加(马里奥);
catalog.add(jamschallenge);
目录添加(计算机科学笔);
目录。添加(rubiksCube);
目录添加(计算机科学芭比);
目录.添加(按钮);
目录.添加(bumperSticker);
ItemOrder=新的ItemOrder(sillyPutty,2);
ItemOrder order2=新的ItemOrder(瓶装气泡,3);
ItemOrder order3=新的ItemOrder(任天堂Wii,1);
ItemOrder order4=新的ItemOrder(计算机科学笔,1);
ItemOrder order5=新的ItemOrder(计算机科学芭比,4);
ItemOrder order6=新的ItemOrder(按钮,12);
ShoppingCart=new ShoppingCart();
购物车。添加(订单);
cart.add(order2);
购物车添加(订单3);
购物车添加(订单4);
购物车添加(订单5);
购物车添加(订单6);
双倍总价=0;
totalPrice=cart.getTotal();
系统输出打印(总价);
}
}
导入java.util.*;
//存储有关整个订单的信息
公共类购物车{
ArrayList项顺序;
双倍总数;
布尔折扣;
公共购物车(){
itemOrder=新的ArrayList();
总数=0.0;
折扣=假;
}
公共作废添加(ItemOrder){
对于(int i=0;iNaN

通过以下方式验证
数量

  if (quantity <0){
     throw new IllegalArgumentException("quantity can't be negative");
  }

if(quantity这是因为您将0除以0

bulkPrice = bulkPrice / bulkAmount;

这意味着这些值必须都为0。如果使用调试,您应该能够确认
quantity
为0并跟踪原因。您需要回过头来查看构成此表达式的值。

FYI
NaN
是“非数字”的缩写,它可能与0的除法相关联。你有很多代码,也许你可以指出你从哪里得到你不期望的
NaN
?就在这里
bulkPrice=bulkPrice/bulkAmount;
第一项。我建议你在你的代码中添加一些
System.out.println
语句以进行转换在值更改时检查它们,甚至打开调试器以查看发生了什么情况……要跟踪此情况,请仔细查看堆栈跟踪并向下操作。如果这没有提供足够的信息,请输入一些简单的System.out.println语句。从getTotal()开始方法,然后继续回溯到购物车中的每个项目。继续回溯,直到您看到值计算不正确的位置。它可能是“类型”问题。我投票结束这个问题,因为它要求先完成调试服务。应该注意的是,在当前实施的公式中,当选择random
bulkQuantity
quantity
时,大约50%的时间会抛出此异常。因此我建议查找正在尝试另一种解决方案以避免此问题。
  if (quantity <0){
     throw new IllegalArgumentException("quantity can't be negative");
  }
bulkPrice = bulkPrice / bulkAmount;