在java中获取NaN的可能解决方法

时间:2014-02-21 17:04:47

标签: java nan

我在Candy Class中有一个名为pricePerHundredGrams的方法,它应该做的是将变量价格乘以100.00并将该答案除以变量weightGrams,最后将该结果返回给变量wammy。当在此代码的第二个最后一个语句中调用变量wammy时,它应该将答案传递给返回结果。并且最终c1和c2也应该显示结果......但是我得到“每百克”的NaN。我的代码出了什么问题?

public class whatever
{  public static void main (String[] args)
   {
      processCandies();


      System.out.println("end of processing");

   }

   public static void processCandies()
   {
      Candy  c1 = new Candy("Hershey", 145, 4.35, 233);
      Candy  c2 = new Candy("Milky Way", 390, 2.66, 126); 

      System.out.println(c1);
      System.out.println(c2);
   } 

}

class Candy
{
   private String name;
   private int calories;
   private double price; 
   private double weightGrams;

  double wammy = pricePerHundredGrams(price, weightGrams);

/**
   Constructor
   @param name
   @param calories
   @param price
   @param gram
*/

public Candy(String n, int cal, double p, double wG)
{
   name = n;
   calories = cal;
   price = p;
   weightGrams = wG;
}

public String getName()
{
   return name;
}

public int getCalories()
{
   return calories;
}

public double getPrice()
{
   return price;
}

public double getWeightGrams()
{
   return weightGrams;
}

public double pricePerHundredGrams(double price, double weightGrams)
{
  return (price * 100.00) / weightGrams; 
} 

public String toString()
{
   String result;
   result = name + "\n" + calories + " calories\n" + weightGrams + " grams\n" + wammy  + " per hundred grams\n";
   return result;
}

}

1 个答案:

答案 0 :(得分:8)

您正在使用wammy的结果初始化pricePerHundredGrams,但priceweightGrams尚未初始化,因此它们都是0 。对于double算术,0除以0NaN(它在数学上是不确定的)。

wammy之后初始化price weightGrams在构造函数中包含有效值:

public Candy(String n, int cal, double p, double wG)
{
   name = n;
   calories = cal;
   price = p;
   weightGrams = wG;
   // Initialize wammy here.
   wammy = pricePerHundredGrams(price, weightGrams);
}

此外,由于它们已经是实例变量,因此您无需将priceweightGrams作为参数传递给pricePerHundredGrams