我正在尝试返回设置的值,但返回的是错误的值

时间:2019-02-05 17:57:24

标签: java

我不确定为什么它不能在getPriceDollar中返回正确的值。在第一个测试中,它是正确的,但是在第二个测试中,它不是。

似乎无法正常工作,但是我发现内存有问题。在我将其退回的那一刻,可能已经有其他情况了。所以这是不确定的行为,对吗? 如何避免呢?

public class FoodTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Food object = new Food();

        object.setName("Kaisen Don");
        System.out.print( object.getName() + ":");

        object.setPrice(480);

        System.out.print(object.getPrice() + " Bath");

        System.out.print( +object.getPriceDollar() + " $ ");
        object.setCalories(350.0);

        System.out.println( +object.getCalories() + " kCal ");



        object.setName("Tokyo Sundae");
        System.out.print( object.getName() + ":");

        object.setPrice(180);

        System.out.print(object.getPrice() + " Bath");

        System.out.print( +object.getPriceDollar() + " $ ");
        object.setCalories(500.5);

        System.out.print( +object.getCalories() + " kCal ");


    }

}

public class Food {
    private String name;
    private int price;
    private double calories;

    public String getName() {           
        return name;
    }

    public void setName(String name1) {
        name=name1;
    }

    public double getCalories() {           
        return calories;            
    }

    public void setCalories(double calories1){
        calories=calories1;
    }

    public int getPrice() {         
        return price;
    }

    public double getPriceDollar() {            
        return  price / 32;
    }


    public void setPrice(int price1) {          
        price=price1;
    }

}


expected 
Kaisen Don:480 Baht (15.0$) 350.0 kcal
Tokyo Sunday:180 Baht (5.625$) 500.5 kcal
actual results
Kaisen Don:480 Bath15.0 $ 350.0 kCal 
Tokyo Sundae:180 Bath5.0 $ 500.5 kCal 

2 个答案:

答案 0 :(得分:1)

用Java划分是一件棘手的事情。用一个整数除以另一个整数时,结果将被截断为一个整数,与您所遇到的完全相同。而且,声明结果应为双精度数并没有帮助,编译器仍会进行整数除法,然后才将整数结果转换为双精度数。

getPriceDollar()方法更改为:

public double getPriceDollar() {            
    return  price / 32.0;
}

然后是一个整数乘以除的结果,结果为double,一切都会好起来的。

答案 1 :(得分:0)

您正在尝试在价格处返回整数。这就是为什么您得到那个结果。 该代码将为您提供正确的结果-

public class FoodTest {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Food object = new Food();

    object.setName("Kaisen Don");
    System.out.print( object.getName() + ":");

    object.setPrice(480);

    System.out.print(object.getPrice() + " Bath");

    System.out.print( +object.getPriceDollar() + " $ ");
    object.setCalories(350.0);

    System.out.println( +object.getCalories() + " kCal ");



    object.setName("Tokyo Sundae");
    System.out.print( object.getName() + ":");

    object.setPrice(180);

    System.out.print(object.getPrice() + " Bath");

    System.out.print( +object.getPriceDollar() + " $ ");
    object.setCalories(500.5);

    System.out.print( +object.getCalories() + " kCal ");


}

}
class Food {
private String name;
private double price;
private double calories;

public String getName() {           
    return name;
}

public void setName(String name1) {
    name=name1;
}

public double getCalories() {           
    return calories;            
}

public void setCalories(double calories1){
    calories=calories1;
}

public double getPrice() {         
    return price;
}

public double getPriceDollar() {            
    return  price / 32;
}


public void setPrice(double price1) {          
    price=price1;
}

}