2014-01-31 3 views
-3

Я пытаюсь написать конструктор и метод, который удовлетворяет следующему результату, и у меня возникли проблемы с запуском.Методы письма для класса Person

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; 
    } 
    } 
+1

Ваш конструктор не имеет параметров, и в тесте вы передаете 2 аргумента. Это даже не нужно компилировать. –

+0

Подсказка: не дублируйте свои переменные в классе 'Person' – MadProgrammer

+0

, мой учитель сказал, что мы всегда ставим конструктор с нулевыми параметрами @HugoSousa –

ответ

0

Подумайте о том, какую информацию вам нужно передать в Person класс для создания Person объекта. Имеет ли смысл, что ваш конструктор для Person не принимает никаких аргументов, но все же вы пытаетесь передать два аргумента в вашем тестовом коде?

Есть также некоторые другие функции, которые вам необходимо написать для вашего класса Person, но если вы думаете о том, что я написал выше, вы должны быть в состоянии начать работу.

+0

Мне сказали, что я всегда должен ставить конструктор с нулевыми параметрами –

+0

Eh, not _always_ , но вы никогда не должны _declare_ переменных в конструкторах. Убедитесь, что вы явно устанавливаете значения своих переменных либо с помощью точечного оператора: 'mary.height = 4.9', либо убедитесь, что ваш конструктор принимает аргументы, чтобы вы могли:« Person mary = new Person (4.9, ... , ...) ' –

0

Создать сеттеры и Getters и передать значения, это лучший способ сделать это.

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; 
} 
+0

Если вы используете геттеры и сеттеры, применимые переменные-члены также должны быть« частными », а тестовый код не должен изменяться, поэтому это не помогает, и, вероятно, t ответ. – Dukeling

+0

@ Dukeling спасибо за ввод. Итак, вы думаете, что передача значений через конструктор имеет преимущество перед использованием сеттеров и геттеров? Можете ли вы пролить свет на это :) – zee

+0

Я думаю, он может просто создать еще один экземпляр класса человека Person person2 = new Person(); – zee