Java 我试图返回我设置的值,但它返回了错误的值

Java 我试图返回我设置的值,但它返回了错误的值,java,Java,我不知道为什么它不能返回getPriceDollar中的正确值。在第一次测试中,它是正确的,但在第二次测试中,它不是 它似乎并没有像预期的那个样工作,但我发现内存有问题。在我归还它的那一刻,它可能已经是别的东西了。所以这是未定义的行为,对吗? 如何避免这种情况 public class FoodTest { public static void main(String[] args) { // TODO Auto-generated method stub

我不知道为什么它不能返回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 

Java中的除法是一件棘手的事情。将一个整数除以另一个整数时,结果将被截断为一个整数,与您所经历的完全相同。唉,声明结果应该是double并没有什么帮助,编译器仍然进行整数除法,然后才返回转换为double的整数结果

将getPriceDollar方法更改为:

public double getPriceDollar() {            
    return  price / 32.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;
}

}

在这里,您遗漏了围绕价格值的括号System.out.print+object.getPriceDollar+$;内存有问题吗?嗯?使用调试器并缩小产生意外结果的特定操作的范围。在调试程序中逐步执行代码时,请观察变量的值。哪一行代码产生了意外的结果?该行中使用的变量值是多少?观察到的结果是什么?预期的结果是什么?为什么?首先,你发布了一个名为Food的类,我们他妈的不知道它是什么,其次,Java管理它的内存,所以它不能随着对内存的不小心管理而改变,如果你在代码中不改变它,就不会有对象的幽灵改变字段。