【问题标题】:Writing Methods for a Person class为 Person 类编写方法
【发布时间】:2014-02-23 13:57:05
【问题描述】:

我正在尝试编写满足以下输出的构造函数和方法,但开始时遇到问题。

4.9
20.0
0
false
4.9' person with $20.00 and 0 tickets
4.9' person with $20.00 and 3 tickets
4.9' person with $20.00 and 1 tickets
4.9' person with $20.00 and a pass

这是测试代码:

public class Person2Tester 
{ 
    public static void main(String args[]) 
    { 
        Person     mary; 

        mary = new Person(4.9f, 20.00f); 

        System.out.println(mary.height); 
        System.out.println(mary.money); 
        System.out.println(mary.ticketCount); 
        System.out.println(mary.hasPass); 
        System.out.println(mary);   // Notice the money is properly formatted

        mary.ticketCount = 3; 
        System.out.println(mary);

        mary.useTickets(2);   // You have to write this method
        System.out.println(mary);

        mary.hasPass = true; 
        System.out.println(mary); 
    } 
}

这是我目前的代码:

public class Person
{
  float height;
  float money;
  int ticketCount;
  boolean hasPass;

  public Person()//empty constructor
  {
    height = 0.0f;
    money = 0.0f;
    ticketCount = 0;
    hasPass = false;
  }

  public Person(float h, float m) 
  {
    height = h;
    money = m;
    ticketCount = 0;
    hasPass = false;

  }
  public String toString() 
  {

    return(this.height + " person with " + this.money + " and " + this.ticketCount + " tickets");
  }

}

这是我完成的代码。感谢所有提供帮助的人。

  public String toString() 
  {
    if(hasPass)
    {
    return(this.height + "' person with $" + this.money + " and has a pass");
    }
    else
    {
      return(this.height + "' person with $" + this.money + " and " + this.ticketCount + " tickets");
    }
  }
  public void useTickets(int numTickets)
  {
    if(this.ticketCount >= numTickets)
    {
      this.ticketCount -= numTickets;
    }
  }

【问题讨论】:

  • 您的构造函数没有参数,并且在测试中您传递了 2 个参数。那甚至不应该编译。
  • 提示:不要在 Person 类中重复声明变量
  • 我的老师说我们应该总是放置一个参数为零的构造函数@HugoSousa
  • 也许你的老师应该学编织。
  • 你已经定义了一个没有参数的构造函数,是的。但是您在测试中使用 2 个参数调用它。您尚未声明任何带有 2 个参数的构造函数,因此不应编译。

标签: java object methods boolean drjava


【解决方案1】:

创建 Setter 和 Getter 并传递值将是更好的方法。

public class Person2Tester{  

     public static void main(String args[]) 
{ 
    Person mary = new Person(); 
    Person person2 = new Person();
   // add as many as you want perosn3 ,4 ..

    mary.setHeight(1);
    mary.setMoney(200);
    mary.setHasPass(false);
    mary.setTicketCount(4);



    System.out.println(mary.getHeight()); 
    System.out.println(mary.getMoney()); 
    System.out.println(mary.ticketCount); 
    System.out.println(mary.isHasPass()); 
    System.out.println(mary);   // Notice the money is properly formatted

     //add your methods here
} 
}



 public class Person{

  float height;
  float money;
  int ticketCount;
  boolean hasPass;

  public Person( )
{
     this.height = height;
     this.money = money;
     this.ticketCount = ticketCount;
     this.hasPass = hasPass;
}

public float getHeight() {
    return height;
}

public void setHeight(float height) {
    this.height = height;
}

public float getMoney() {
    return money;
}

【讨论】:

  • 如果你使用getter和setter,适用的成员变量一般也应该是private,并且测试代码不应该改变,所以这并没有太大帮助,而且可能应该不是答案。
  • @Dukeling 感谢您的输入。所以您认为通过构造函数传递值比使用 setter 和 getter 更有优势吗?你能解释一下吗:)
  • 我认为他可以创建另一个人员类 Person person2 = new Person();
  • “所以你认为通过构造函数传递值比使用 setter 和 getter 更有优势?” - 我这样做(通过构造函数传递的代码通常要少得多,而且只是事情的完成方式,尽管可读性稍差),但我不确定你是如何从我的评论中得到的。我没有评论 getter 和 setter,只是你的成员变量是 package-private,而不是 private,但这确实是相当小的。主要问题是您显着更改了测试代码,这导致答案没有那么有用。
【解决方案2】:

想想你需要将什么样的信息传递给你的Person 类来创建一个Person 对象。 Person 的构造函数不带参数是否有意义,但您却试图在测试代码中传递两个参数?

您还需要为Person 类编写其他一些函数,但是如果您考虑一下我上面写的内容,您应该可以开始了。

【讨论】:

  • 有人告诉我,我应该始终使用零参数的构造函数
  • 嗯,不是总是,但你不应该在构造函数中声明变量。确保您使用点运算符显式设置变量的值:mary.height = 4.9,或者确保您的构造函数接受参数以便您可以这样做:Person mary = new Person(4.9, ..., ...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多