【问题标题】:Instantiating a new object to receive another feature实例化一个新对象以接收另一个特征
【发布时间】:2021-02-15 16:17:01
【问题描述】:

我一直在做这个项目,所以我知道如何使用自定义对象和自定义对象类型。我遇到的问题是当我写出 System.out.println(fe1.TestAuto);它说需要标识符,我不知道为什么。我试图打印出该对象,但它不起作用。我遇到的另一个问题是,当我想使用 discountValue() 方法对成本进行折扣时,它说 double 不能转换为 Feature,我不知道为什么。

discountValue() 方法从双精度 c 中获取输入,并用要素类中的双精度 d 减去该输入。

下面是我的代码。有人可以帮助我吗?

public class Auto
{
    public String name;
    public double size;
    public Auto(String s, double sz){
        name = s;
        size = sz;
    }
    //step 2: method showFeature()
    public Feature showFeature(Feature f){
        
        System.out.println("The feature " +f+" costs: "+f.cost);
        
    }
    public Feature discountValue(String s, double c, double d){
    //Step 3: method to give discount on cost
        
        double z = c - d.cost;
    
        return z;
    }
}



public class TestAuto
{
   public static void main(String args[]){
    //instantiate an Auto object
    Auto at = new Auto("AMG", 73.5);
    //instantiate a Feature object
    Feature fe = new Feature("Leather Seat", 3000);
    //execute method addFeature with Feature object
    at.showFeature(fe);
    //prepare a new Feature object for receving information
    Feature fe1 = new Feature("", 0);
    //Run method discountValue with a feature and a new value
    fe1 = at.discountValue("GPS", 15000, 0.2);
    //print out the object
    System.out.println(fe1);
   }
}







public class Feature
{
    public String name;
    public double cost;
    public Feature(String s, double d){
        //step 1
        name = s;
        cost = d;
    }
    //step 4
    System.out.println(fe1.TestAuto);
}




【问题讨论】:

  • Class Feature 没有 TestAuto 字段。

标签: java dereference custom-object


【解决方案1】:

double z = c - d.cost;

d 的类型为 double。它没有cost 字段。事实上,它是一个原语,一开始就不能取消引用(在双精度后加一个点是一个即时编译器错误)。

(在 Feature.java 中)System.out.println(fe1.TestAuto);

你不能在这里写这个;在类 def 中,您可以定义字段、方法、构造函数、初始化程序和内部类型。但不是实际代码(它什么时候运行?) - 那是实际代码,因此不合法。将它放在方法或构造函数中。

【讨论】:

    【解决方案2】:

    您不能调用 System.out.println(fe1.TestAuto);(您的第 4 步),因为它不在您的类 Feature 的方法中。如果你删除这一行,其余的就可以了(只需从 d.cost 中删除 .cost

    我不明白你为什么给你的班级打电话TestAuto,谁是你的主力。

    【讨论】:

    • 感谢您提供的所有提示,但我从 d 中删除了 .cost,它在返回 z 时显示不兼容的类型:double 无法转换为 Feature。我该怎么办?>
    • 哦,是的,对不起,我可以建议以下更正:步骤 2 public void 而不是 public Feature,因为您什么也不返回,只是打印一些东西。第 3 步,如果您想返回 Feature,请将 return z 更改为 return new Feature(s,z),您将需要 import class Feature 或类似的东西。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多