2014-12-14 4 views
0

У меня есть дата класса, которая просто создает массив списка дней недели.Исключение Null Pointer для Arraylist?

import java.util.*; 

public class Date { 

    public static final String[] daysofTheWeek = {"Mon" , "Tue" , "Wed" , "Thurs" , "Fri" , "Sat" , "Sun"}; 
    private String dayofweek; 
    private int day; 
    private int month; 

    public int getDate() { 
     return this.day; 
    } 

    public int getMonth() { 
     return this.month; 
    } 

    public Date(String dayofweek, int day, int month) { 
     this.day = 1; 
     if (day >= 1 && day <= 31) { 
      this.day = day; 
     } 

     this.month = 12; 
     if (month >= 1 && month <= 12) { 
      this.month = month; 
     } 

     this.dayofweek = "Mon"; 
     if (isValidDOW(dayofweek)) { // why is this in the parameters? 
      this.dayofweek = dayofweek; 
     } 
    } 

    // must validate is DOW 
    // TRUE/FALSE is the day of the week matching? 
    public boolean isValidDOW(String d) { 
    for (int i = 0; i < dayofweek.length(); i++) 
     if (d.equals(daysofTheWeek[i])) { // why i? 
      return true; 
     } 
     return false; 
    } 

    // to string 
    public static String monthToString(int i) { 
     switch(i) { 
      case 1: return "January"; 
      case 2: return "Feb"; 
      case 3: return "March"; 
      case 4: return "April"; 
      case 5: return "May"; 
      case 6: return "June"; 
      case 7: return "July"; 
      case 8: return "August"; 
      case 9: return "September"; 
      case 10: return "October"; 
      case 11: return "November"; 
      case 12: return "December"; 
      default: return "Invalid Month!!"; 
     } 
    } 

    public String toString() { 
     return this.dayofweek + "," + Date.monthToString(this.month) + " " + this.day; 
    } 

    public String getDayOfWeek() { 
     return this.dayofweek; 
    } 
} 

Теперь я пытаюсь получить все дни (скажем, верните количество раз, когда всплывают всплески). Я попытался использовать цикл, чтобы пройти и подсчитать все, но я получаю исключение с нулевым указателем. Я смотрел на это некоторое время и не могу понять, что с ним не так. Может ли кто-нибудь вести меня в правильном направлении?

import java.util.*; 
/** 
* ArrayList example 
*/ 
public class Calendar { 

    private ArrayList<Date> Schedule; 

    public ArrayList<Date> sundays(String dayofweek) { 
     ArrayList<Date> app = new ArrayList<Date>(); 
     for (Date entry : Schedule) { 
      String d = entry.getDayOfWeek(); 
      if (entry.getDayOfWeek() == dayofweek) { 
       app.add(entry); 
      } 
      else if (app.size() == 0) { 
       return null; 
      } 
     } 
     return app; 
    } 
} 
+1

Re: «Я получаю исключение из null указателя»: Stacktrace или этого не произошло. ;-) – ruakh

ответ

0

Вы никогда не инициализировать поле Schedule, поэтому по умолчанию инициализируется в null. Поэтому строка for (Date entry:Schedule) (которая является синтаксическим сахаром для вызова Schedule.iterator() и итерации по результирующему итератору) выдает NullPointerException.

Также — Нестатические имена полей в Java должны начинаться с строчных букв. Вы должны изменить Schedule на schedule. (Или вы можете следовать одному из более конкретных соглашений об именах, которые существуют там. Некоторые проекты запускают все имена полей с — в вашем случае fSchedule, другие начинают имена всех полей с m для «члена» — в вашем случае, mSchedule Если принять один из этих конвенций, только не забудьте быть последовательными об этом)

0

Я думаю, что метод isValidDOW должен быть:..

public boolean isValidDOW(String d){ 
    for (int i=0; i < daysofTheWeek.length; i++) 
     if (d.equals(daysofTheWeek[i])) // why i? 
     { 
      return true; 
    } 
    return false; 
} 

Использование daysofTheWeek.length вместо DayOfWeek. длина(), например, если dayofweek = 'Sat', цикл for будет выполнять только раз, но «Sat» находится на шестом месте, а значение в ArrayList daysofTheWeek.

Смежные вопросы