【问题标题】:Getting value from a method with the variable from another void method使用来自另一个 void 方法的变量从方法中获取值
【发布时间】:2017-11-27 20:09:58
【问题描述】:

我是一个初学者,我正在学习如何使用 java 中的另一种“getter”方法从 void 方法中检索值。但是,这一次,它继续返回 0.0。我不确定我做错了什么。

构造函数类:

private double gallons;
private double t;

public CO2()
{
  gallons = 1288.0;
  t = 0.0;
}

public void tons()
{
  t = gallons * 8.78e-3;
}

public double getT()
{
  return t;
}

测试类:

CO2 gas = new CO2;
System.out.print(gas.getT());

如果我在 main 方法中使用 gas.tons() 将 void 更改为 double 并“return”而不是“t =”,那么它会起作用,但我需要使用 getter 方法。我不明白为什么它只返回 0.0。

【问题讨论】:

  • 你没有调用tons()
  • 您为什么希望它不为零?您希望代码的哪一部分赋予它一个值?
  • 也就是说,这种错误说明设计有多么错误。构造函数或 getT() 方法应该计算 t 的值。你不应该调用一个tons() 方法来计算它。此外,您的代码甚至无法编译:new CO2()。发布您的真实代码。
  • 它一直返回0.0,因为您没有调用tons() 来更改t 的值。您还需要阅读如何创建 getter 和 setter 方法。
  • @MiLe:好的,所以您正在调用 getter 方法并成功获取值。究竟是什么问题?为什么你期望值不是0.0

标签: java methods void getter


【解决方案1】:

您不需要tons() 方法。坦率地说,您甚至不需要存储吨数 - 只需即时执行计算:

public class CO2 {
    private double gallons;

    public CO2() {
        gallons = 1288.0;
    }

    public double getGallons() {
        return gallons;
    }

    public double getTons() {
        return gallons * 8.78e-3;
    }
}

【讨论】:

    【解决方案2】:

    当您创建类的对象时,实例变量会使用构造函数中的值进行初始化,因此 t 的值为 0。

    但是,您要在名为tons 的方法中更改t 的值,因此要更改t 的值,您应该调用该方法,否则它将保持为零。

    要更改 t 的值,最好使用 setter 方法。如果您确定该值将始终是一个常量并且不会更改,请在构造函数本身中设置该值。

    【讨论】:

      【解决方案3】:

      您的构造函数设置 t = 0.0。然后,您只需询问私有变量 t 的值,而无需操作该值。在某些时候,您需要调用tons() 以将加仑计算为t 的值。

      CO2 gas = new CO2;
      gas.tons();
      System.out.print(gas.getT());
      

      将返回一个计算值,或者您可以在构造方法中添加对tons() 的调用。

      public CO2()
      {
        gallons = 1288.0;
        t = 0.0;
        tons();
      }
      
      public void tons()
      {
        t = gallons * 8.78e-3;
      }
      
      public double getT()
      {
        return t;
      }
      

      【讨论】:

      • 我不会在 getter 中调用 tons()。修改状态的 getter 在语义上是个坏主意。
      • 哦,太好了。我的目标是找到一个快速的解决方案来帮助他,但忽略了这一点。我会编辑帖子。
      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多