当前位置: 首页 > 知识库问答 >
问题:

使对象变量在另一个类中私有

阎兴为
2023-03-14

我已经编写了这个预期输出的代码:

输入样本:

输入乘客姓名:Priya

输入性别(M或F/m或f):F

输入年龄:61

请输入票号:140

输入票价:500.0

示例输出1:

票号:143

乘客姓名:Priya

一张票的价格: 500.0

总金额: 375.0

我必须根据我所写函数的年龄和性别来更改总量值。

我的代码: 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());

    }

}

但我的TotalAmount值始终为0.0,它不会得到更新。有些测试用例失败,请帮助解决:

失败1-个人访问说明符/修饰符不正确-应为[私人]

失败2-检查方法setPerson的签名(Returntype/Argument/AccessSpecifier/MethodName)是否正确

失败3-检查方法getPerson的签名(Returntype/Argument/AccessSpecifier/MethodName)是否正确

请帮帮忙

谢谢

共有3个答案

缪晋
2023-03-14

basticket类中,为Person对象创建一个getter和setter,并通过main方法设置值。

荆亦
2023-03-14

在您的BusTicket类中,一个新的Person对象被分配给Person属性,然后您试图从新创建的Person对象中获取年龄和性别详细信息,但此时Person的年龄和性别尚未填充。

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

这就是为什么你得到的是0。理想情况下,你应该把使用输入详细信息创建的人对象传递给BusTicket类,并用那个人填充BusTicket的人属性。现在我就告诉你。:)

试试看:)

申屠鹏
2023-03-14

您需要调用calculateTotal来更新totalAmount。否则,它将始终为0.0

...
System.out.println("Price of a ticket : "+bt.getTicketPrice());
bt.calculateTotal(); // Add this line
System.out.println("Total Amount : "+bt.getTotalAmount());
 类似资料:
  • 我有两个Java类,Product和ProductReview。ProductReview除了变量long id和String review外,还有一个名为Product的变量,该变量应包含类Product中的一个对象。例子: Products类有私有变量long id、String name和List评论(它也从Product评论类中获取评论)。产品类与Product评论有一对多的关联,反之亦然

  • 问题内容: 请忘记设计。我知道OOP指定私有对象是该类的私有对象。我的问题是,为什么将OOP设计为使私有字段具有类级别的访问权限而不具有对象级别的访问权限? 问题答案: private修饰符强制执行封装原理。 这个想法是,“外部世界”不应更改Person内部流程,因为Person的实现可能会随时间而变化(并且你将不得不更改整个外部世界以解决实现方面的差异-这几乎是不可能的)。 当Person实例访

  • 为什么我不能这样做? 我得到: 致命错误:常量表达式包含无效操作 这有什么办法吗?

  • 这是第一个代码: 那么这是它将在其中显示输出的主类: 很抱歉,如果我不清楚我的问题,但我想使用ArrayList,其中我将ArrayList存储在Person类中,我想使用公共字符串toString查看它,这样它将显示名称和年龄

  • 我的主课有两个班(我们称它们为classA和classB)。 是否有机会在classB中设置classA变量? 诸如此类: 非常感谢!问候