【问题标题】:Using another class's method(s) in a method在方法中使用另一个类的方法
【发布时间】:2014-10-23 01:16:14
【问题描述】:

更新:结果表明我的问题与主构造函数有关。我没有正确初始化类实例,所以 java 指出我的问题与我的方法所在的行有关。换句话说,我的方法有问题,因为它们没有'没有正确初始化。

我有 3 节课。第一个设置Date,第二个计算发票并使用Date 类的2 个实例。第三类使用main()中第二类的1个实例。

我的问题是,我试图在第二类中使用setDates 方法,该方法使用第一类实例及其方法,但它不起作用。

这是 Java 错误: 线程“主”java.lang.NullPointerException 中的异常 在 InvoiceDate.setDatesFromUser(InvoiceDate.java:57) 在 Thirdclss.main(Thirdclss.java:7)

我想就如何修复代码或以其他方式执行相同操作以使其正常工作的建议。

这是 3 个类的示例代码。如果我没有足够清楚地说明我的问题,请发表评论。

//first class that set date

public class OurDate {
    private int day;

    public OurDate() {
        day = 1;
    }

    public OurDate(int d ){
        day = d;
    }

    public void inputDay( ) {
        Scanner keyboard = new Scanner (System.in);
        System.out.print("Enter a day(1-31): ");
        day = keyboard.nextInt();
    }// end inputday

    public int calcTotalDay() {
        int x = ((year*365)+(month*30)+day);
        return  x;
    }
}

这是第二课:

public class InvoiceDate {
    private double invoiceAmount;
    private OurDate todayDate;
    private OurDate invoiceDate;

    public InvoiceDate (double invoiceAmount,OurDate todayDate, OurDate invoiceDate){
        this.invoiceAmount = invoiceAmount;
        this.todayDate = todayDate;
        this.invoiceDate = invoiceDate;
    }

    public void setDatesFromUser (){  //HERE is where I stuck
        todayDate.inputDay();        //inputDay is method in OurDate class
        invoiceDate.inputDay();
    }

    public void calculateInvoice(){
        int DayAmt = todayDate.calcTotalDay()  -  invoiceDate.calcTotalDay() ;
        invoiceAmount = (DayAmt/30)*5; 
    }
}

第三个类只是从第二个类和主构造函数中获取一个实例。

 //Third Class
 public class Thirdclss  {
public static void main(String[] args){
    System.out.println("Welcome");
    InvoiceDate invDate = new InvoiceDate(10, null, null);
    invDate.setDatesFromUser();
    invDate.calculateInvoice();

}

}

【问题讨论】:

  • 您需要将问题中的代码量减少到显示问题所需的绝对最低限度,并使您的问题范围尽可能窄,以便清楚。
  • 尽可能缩短代码
  • 尝试在day = keyboard.nextInt(); 之后添加keyboard.next();,这将清除输入缓冲区中的换行符。
  • 您看到了什么错误/问题?
  • 将它们公开或通过扩展您要借用的类来继承它们。

标签: java methods inner-classes


【解决方案1】:

需要初始化InvoiceDate中的成员:

public class InvoiceDate {
    private double invoiceAmount;
    private OurDate todayDate = new OurDate();
    private OurDate invoiceDate = new OurDate();

【讨论】:

    【解决方案2】:

    问题在于如何在第三类中获取 InvoiceDate 的实例,请尝试:

    //Third Class
    public class Thirdclss  {
        public static void main(String[] args) {
            System.out.println("Welcome");
            InvoiceDate invDate = new InvoiceDate(10); //this line had the issue
            invDate.setDatesFromUser();
            invDate.calculateInvoice();
        }
    }
    

    更新:

    在构造函数中,您将 null 传递给 todayDateinvoiceDate 删除这些并更改第二个类:

    public class InvoiceDate {
        private double invoiceAmount;
        OurDate todayDate = new OurDate();
        OurDate invoiceDate = new OurDate();
    
        public InvoiceDate (double invoiceAmount) {
            this.invoiceAmount = invoiceAmount;
        }
        //rest of class
    

    【讨论】:

    • 我更正了实例名称及其字段。仍然出现空指针错误
    【解决方案3】:
    public InvoiceDate(){
        minutesPurchased = 0.00;
        todayDate = new OurDate();    //This is the how I should initialize 
        invoiceDate = new OurDate();  //instances from class 1.This is the solution...
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      相关资源
      最近更新 更多