Utkarsh Goyal
Utkarsh Goyal

Reputation: 23

To make the object variable private in another class

I have written the code this expected output:

Sample input :

Enter the passenger name: Priya

Enter the gender(M or F / m or f): F

Enter the age: 61

Enter the ticket no: 140

Enter the ticket price: 500.0

Sample Output 1 :

Ticket no:143

Passenger Name:Priya

Price of a ticket : 500.0

Total Amount : 375.0

I have to change the total amount value based on the age and gender for which I have written function.

My code: Person.java

public class Person {
    private String name;
    private char gender;
    private int age;
    public void setName(String name ){
        this.name = name;
    }
    public void setGender(char gender){
        this.gender = gender ;
    }
    public void setAge(int age ){
        this.age = age;
    }
    public String getName(){
        return this.name;
    }
    public char getGender(){
        return this.gender;
    }
    public int getAge(){
        return this.age;
    }
}

BusTicket.java

public class BusTicket {
    private int ticketNo;
    private float ticketPrice;
    private float totalAmount;
    Person person = new Person();
    int age = person.getAge();
    char g = person.getGender();
    public void setTicketNo(int ticketNo){
        this.ticketNo = ticketNo;
    }
    public void setTicketPrice(float ticketPrice){
        this.ticketPrice = ticketPrice;
    }
    public void setTotalAmount(float totalAmount){
        this.totalAmount = totalAmount;
    }
    public void calculateTotal()
    {  
        if(age<16)
        {
            totalAmount = ticketPrice/2;
            setTotalAmount(totalAmount);
        }
            else if(age>=60)
        {
            totalAmount = 3*(ticketPrice/4);
            setTotalAmount(totalAmount);
        }
        else if(g == 'f'|| g== 'F')
        {
            totalAmount = 9*(ticketPrice/10);
            setTotalAmount(totalAmount);
        }
        else{
            setTotalAmount(ticketPrice);
        }
    }
    public int getTicketNo(){
        return this.ticketNo;
    }
    public float getTicketPrice(){
        return this.ticketPrice;
    }
    public float getTotalAmount(){
        return this.totalAmount;
    } 
}

TestMain.java

import java.util.Scanner;
public class TestMain {
    public static BusTicket getTicketDetails()
    {
        Scanner sc = new Scanner(System.in);
        BusTicket bt = new BusTicket();
        System.out.println("Enter the ticket no:");
        bt.setTicketNo(sc.nextInt());
        System.out.println("Enter the ticket price:");
        bt.setTicketPrice(sc.nextFloat());
        return bt;
    }
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        Person p = new Person();
        BusTicket bt;
        System.out.println("Enter the passenger name:");
        p.setName(sc.nextLine());
        System.out.println("Enter the gender(M or F/ m or f):");
        p.setGender(sc.next().charAt(0));
        System.out.println("Enter the age:");
        p.setAge(sc.nextInt());
        bt = getTicketDetails();
        System.out.println("Ticket no:"+bt.getTicketNo());
        System.out.println("Passenger Name:"+p.getName());
        System.out.println("Price of a ticket : "+bt.getTicketPrice());
        System.out.println("Total Amount : "+bt.getTotalAmount());

    }

}

But my TotalAmount value is always coming 0.0, it is not getting updated. And some test cases are failed please help to resolve them:

Fail 1 - Incorrect access specifier/modifier for person -Should be a [private]

Fail 2 - Check whether the signature(Returntype/Argument/AccessSpecifier/MethodName) of the method setPerson is correct

Fail 3- Check whether the signature(Returntype/Argument/AccessSpecifier/MethodName) of the method getPerson is correct

Please Help

Thanks

Upvotes: 0

Views: 4429

Answers (3)

Rohit Parmar
Rohit Parmar

Reputation: 1

In your BusTicket class, create a getter and setter for the Person object, and set the value from the main method.

Upvotes: 0

naoko
naoko

Reputation: 133

In your BusTicket class a new Person object is assigned to Person attribute and then you are trying to get age and gender details from that newly created Person object, but at this moment Person's age and gender are not populated yet.

  Person person = new Person();
  int age = person.getAge();  

That's why you are getting 0. What should ideally happen is, you should pass the person object created using the input details to the BusTicket class and populate the BusTicket's person attribute with that person.For now I ll tell just that. :)

Give a try :)

Upvotes: 0

H&#233;ctor
H&#233;ctor

Reputation: 26034

You need to call calculateTotal to update totalAmount. Otherwise, it will be always 0.0.

...
System.out.println("Price of a ticket : "+bt.getTicketPrice());
bt.calculateTotal(); // Add this line
System.out.println("Total Amount : "+bt.getTotalAmount());

Upvotes: 1

Related Questions