出错提示:
java.lang.NullPointerException
at dateType.<init>(DataTest.java:11)
at DataTest.main(DataTest.java:111)
Exception in thread "main" 代码如下:
class Date 
{
int month;
int day;
int year;
}class dateType {
public Date a;        //日期结构的数据成员
dateType(Date b){   //构造函数
a.month = b.month;
a.day = b.day;
a.year = b.year;
}
void Modify(int m,int d,int y){  //修改日期
a.month = m;
a.day = d;
a.year = y;
}
void Next(){       //明天
a.day++;
if(a.day>MonthEnd(a.month))
{
a.day = 1;
a.month++;
if(a.month>12)
{
a.month =1;
a.year++;
}
}

}
  void Previous(){    //昨天
  a.day--;
  if(a.day<1)
  {
  a.month--;
  if(a.month<1)
  {
  a.month=12;
  a.year--;
  }
  a.day = MonthEnd(a.month);
  }
 
  }
  int WeekDay()
  {    //星期几
  int n;
  n = (a.year-1)*365;
  n += (a.year -1)/4;
  n -=(a.year-1)/100;
  n+= (a.year -1)/400;
  for(int i=1;i<a.month;i++)
 
  n+=MonthEnd(i);
  n=+a.day;
  n%=7;
  return n;
  } 
  void Print() {   //打印日期
System.out.println("年" + "月" +"日");
switch(WeekDay())

case 0:System.out.println("Sun");
case 1:System.out.println("Mon");
case 2:System.out.println("Tus");
case 3:System.out.println("wed");
case 4:System.out.println("Thu");
case 5:System.out.println("Fir");
case 6:System.out.println("sat");
}
  }
protected boolean isLeapYear()
{   //保护成员函数判断是否闰年
return((a.year%4==0&&a.year%100!=0)|(a.year%400==0));
}
protected int MonthEnd(int m)
{ //某月的天数
switch(m)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;
case 4:case 6:case 9:case 11:return 30;
case 2:
  if(isLeapYear()) 
  return 29;
  else 
  return 28;

}
return 0;
}
};
public class DataTest { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Date a = new Date();
a.day =21;
a.month = 8;
a.year = 2000;

dateType oneday = new dateType(a);


oneday.Print();
oneday.Next() ;
oneday.Print();
oneday.Modify(8,21,2006);
oneday.Print();
oneday.Previous();
oneday.Print(); }}

解决方案 »

  1.   

    class dateType {
    public Date a = new Date();        //日期结构的数据成员
      

  2.   

    public Date a; //日期结构的数据成员你这个成员没有实例化就调用 a.month肯定空指针了
      

  3.   

    class Date 
    {
    public int month;
    public int day;
    public int year;
    }加public试试看
    其实最好用private 然后写get set方法
      

  4.   

    package com.lee;class Date {
    int month; int day; int year;
    }class dateType {
    public Date a = new Date(); // 日期结构的数据成员 public dateType(Date b) { // 构造函数
    a.month = b.month;
    a.day = b.day;
    a.year = b.year;
    } void Modify(int m, int d, int y) { // 修改日期
    a.month = m;
    a.day = d;
    a.year = y;
    } void Next() { // 明天
    a.day++;
    if (a.day > MonthEnd(a.month)) {
    a.day = 1;
    a.month++;
    if (a.month > 12) {
    a.month = 1;
    a.year++;
    }
    } } void Previous() { // 昨天
    a.day--;
    if (a.day < 1) {
    a.month--;
    if (a.month < 1) {
    a.month = 12;
    a.year--;
    }
    a.day = MonthEnd(a.month);
    } } int WeekDay() { // 星期几
    int n;
    n = (a.year - 1) * 365;
    n += (a.year - 1) / 4;
    n -= (a.year - 1) / 100;
    n += (a.year - 1) / 400;
    for (int i = 1; i < a.month; i++) n += MonthEnd(i);
    n = +a.day;
    n %= 7;
    return n;
    } void Print() { // 打印日期
    System.out.println("年" + "月" + "日");
    switch (WeekDay()) {
    case 0:
    System.out.println("Sun");
    case 1:
    System.out.println("Mon");
    case 2:
    System.out.println("Tus");
    case 3:
    System.out.println("wed");
    case 4:
    System.out.println("Thu");
    case 5:
    System.out.println("Fir");
    case 6:
    System.out.println("sat");
    }
    } protected boolean isLeapYear() { // 保护成员函数判断是否闰年
    return ((a.year % 4 == 0 && a.year % 100 != 0) | (a.year % 400 == 0));
    } protected int MonthEnd(int m) { // 某月的天数
    switch (m) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    return 31;
    case 4:
    case 6:
    case 9:
    case 11:
    return 30;
    case 2:
    if (isLeapYear())
    return 29;
    else
    return 28; }
    return 0;
    }
    }public class T01 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Date a = new Date();
    a.day = 21;
    a.month = 8;
    a.year = 2000; dateType oneday = new dateType(a); oneday.Print();
    oneday.Next();
    oneday.Print();
    oneday.Modify(8, 21, 2006);
    oneday.Print();
    oneday.Previous();
    oneday.Print(); }}
      

  5.   

    一个问题是:public Date a; // 日期结构的数据成员
    这导致了空指针异常
    另外一问题是:dateType这个类的定义后面还有“;”号。这个也是一个小错误。:)
      

  6.   

    你没有对你的Date a进行初始化,系统默认初始化的值对于Object来说就是null