【发布时间】: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