【问题标题】:how to use one class variables into another class如何将一个类变量用于另一个类
【发布时间】:2012-04-16 10:56:51
【问题描述】:

我是 java 编码的新手...我正在尝试实现一个说明多任务处理的程序。在编程时我被一个小任务打动了,我无法找到解决方法。得到在细节方面,我有 3 个类,如果我单独声明变量,我可以成功完成我的任务,但我想要这样一种要求,我想在另一个类中使用一个类的变量。即使我是将变量声明为公共,它会引发异常/错误。这是我的实现代码,供专家们清楚地理解!

class TrainReservation extends Thread
{
    public int trainAvailability=1, bearthAvailability=1;
    int noOfSeats;
    TrainReservation(int noOfSeats)
    {
        this.noOfSeats=noOfSeats;
    }
    public void run()
    {
        if((trainAvailability >= noOfSeats) && (bearthAvailability >= noOfSeats))
        {
            System.out.println("seat is reserved");
            trainAvailability=trainAvailability-noOfSeats;
            bearthAvailability=bearthAvailability-noOfSeats;
            System.out.println(trainAvailability);
        }
        else
            System.out.println("no seats available");
    }
}
class TrainReservationCancel extends Thread
{
    int trainAvailability;
    trainAvailability=tr.trainAvailability;
    int noOfSeats;
    TrainReservationCancel(int noOfSeats)
    {
        this.noOfSeats=noOfSeats;
    }
    public void run()
    {
        if(noOfSeats!=0)
        {
            bearthAvailability=bearthAvailability+noOfSeats;
            trainAvailability=trainAvailability+noOfSeats;
            System.out.println(bearthAvailability);
        }
    }
}
class MainClass
{
    public static void main(String[] args)
    {
        TrainReservation tr=new TrainReservation(2);
        TrainReservationCancel tr1=new TrainReservationCancel(1);
        Thread obj=new Thread(tr);
        tr.start();
        Thread obj1= new Thread(tr1);
        tr1.start();
    }
}

这是错误所在的屏幕截图

任何帮助都会对我有很大帮助并感激不尽。

提前谢谢大家:)

【问题讨论】:

  • 抛出了什么异常/错误,具体在哪里?请添加完整的堆栈跟踪。
  • trainAvailability=tr.trainAvailability; 这是什么tr
  • @shan 它是火车可用性类的对象
  • @PéterTörök 请查看已编辑的问题(帖子),我已放置错误屏幕截图,谢谢
  • @Eshwar,但我在您的班级中看不到 tr 变量。您应该在 TrainReservationCancel 类中声明它。 MainClass 中有一个 tr 变量。你应该把它传递给TrainReservationCancel 类。

标签: java class variables


【解决方案1】:

你得到一个编译错误,而不是一个有助于知道包括哪一行的异常。

您正在使用tr,但您没有将其传递给 TrainReservationCancel 类。

尝试更改您的构造函数以获取 TrainReservation

TrainReservationCancel(int noOfSeats, TrainReservation tr)
{
    this.noOfSeats=noOfSeats;
    this.trainAvailability=tr.trainAvailability;
}

主要是

TrainReservation tr=new TrainReservation(2);
TrainReservationCancel tr1=new TrainReservationCancel(1, tr);

顺便说一句:你想让你的课程implements Runnable 而不是extends Thread

【讨论】:

  • 在 TrainReservationCancel 运行方法中使用 BearthAvailability 也是如此
  • @peter lawrey 但是即使在执行了你的建议之后,也没有任何效果,请帮助我,谢谢关心!
  • 您所说的“没有任何效果”是什么意思?你的意思是你有同样的错误?你的意思是你有新的错误?您的意思是在您修复代码中的其余错误后,您的程序现在可以编译,但程序确实可以工作?
  • @Eshwar,“我们的方法没什么用”包含有关您的实际问题的零信息,因此无法为您提供帮助。请学会提出好的问题,包括解决问题所需的所有相关信息。例如:您观察到的确切错误是什么,它发生在哪里,输入是什么以及预期/实际输出是什么?
  • 如果您想在其他方法中使用tr,您需要将其保存为构造函数中的字段并改用tr.bearthAvailability
【解决方案2】:

trainAvailability=tr.trainAvailability; tr 未在此类中声明

如果您在线程环境中执行此操作并读取变量,则最好将它们声明为 volatile

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 2017-08-12
    • 1970-01-01
    • 2014-01-03
    • 2019-09-05
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多