Java 我试图返回我设置的值,但它返回了错误的值
我不知道为什么它不能返回getPriceDollar中的正确值。在第一次测试中,它是正确的,但在第二次测试中,它不是 它似乎并没有像预期的那个样工作,但我发现内存有问题。在我归还它的那一刻,它可能已经是别的东西了。所以这是未定义的行为,对吗? 如何避免这种情况Java 我试图返回我设置的值,但它返回了错误的值,java,Java,我不知道为什么它不能返回getPriceDollar中的正确值。在第一次测试中,它是正确的,但在第二次测试中,它不是 它似乎并没有像预期的那个样工作,但我发现内存有问题。在我归还它的那一刻,它可能已经是别的东西了。所以这是未定义的行为,对吗? 如何避免这种情况 public class FoodTest { public static void main(String[] args) { // TODO Auto-generated method stub
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管理它的内存,所以它不能随着对内存的不小心管理而改变,如果你在代码中不改变它,就不会有对象的幽灵改变字段。