2015-03-03 5 views
-3

Создайте класс под названием Date. У Make Date есть статический метод, называемый getMonthName, который принимает целое число, а затем возвращает строковое представление имени соответствующего месяца. Числа 1-12 будут отображаться в январе-декабре соответственно. Если значение за пределами 1-12 передано, верните «Недействительный месяц». Просмотр требуемого выхода. Добавьте два конструктора в Date: один, который принимает целое число месяц, день и год. Другой, который принимает месяц String и целое число и год. Добавьте метод ToString, который возвращает дату является следующий формат: День Месяц, ГодНужна помощь В моем коде есть ошибки

Мой код выглядит следующим образом

public class Date 
{ 
private static String[] monName; 
private int month, day, year; 

public static String getMonthName(int num) 
{ 
    if(num < 1 || num > 12) 
    { 
     return "invalid month"; 
    } 
    else 
    { 
     String[] name = {" ", "January", "February", "March", "April", "May"    
    , "June", "July", "August", "September", "October","November", "December"}; 
     return name[num]; 
    } 
}  

public static int getMonthNumber(String monthName) 
{ 
    for(int n = 1; n <= 12; n++) 
    { 
     if (monthName.equalsIgnoreCase(monName[n])) 
      return n; 
    } 
    return -1; 
} 

public Date(int month, int day, int year) 
{ 
    this.month = month; 
    this.day = day; 
    this.year = year; 
}  

public Date (String month, int day, int year) 
{ 
    this(day, getMonthNumber(month), year); 
} 

public String toString() 
{ 

    String m = month + day + ", " + year; 
    return m; 
} 
} 

тестовый код, чтобы запустить мой код

import java.util.Random; 
public class DateDemo 
{ 
public static void main(String[] args) 
{ 
    System.out.println("-- Number Tests --"); 
    Random r = new Random(0); 
    for (int x = 0; x < 50; x++) 
    { 
     Date d = new Date(Math.abs(r.nextInt() % 12) + 1, //month 
          Math.abs(r.nextInt()) % 28, //day 
          1900 + r.nextInt() % 100); //year 
     System.out.println(d); 
    } 

    System.out.println("-- Month Name Tests --"); 
    System.out.println(new Date("January", 1, 1970)); 
    System.out.println(new Date("February", 1, 1970)); 
    System.out.println(new Date("March", 1, 1970)); 
    System.out.println(new Date("April", 1, 1970)); 
    System.out.println(new Date("May", 1, 1970)); 
    System.out.println(new Date("June", 1, 1970)); 
    System.out.println(new Date("July", 1, 1970)); 
    System.out.println(new Date("August", 1, 1970)); 
    System.out.println(new Date("September", 1, 1970)); 
    System.out.println(new Date("October", 1, 1970)); 
    System.out.println(new Date("November", 1, 1970)); 
    System.out.println(new Date("December", 1, 1970)); 

} 
} 

Ошибка что я получаю

Исключение в потоке «главный» java.lang.NullPointerException в Date.getMonthNu mber (Date.java:32) по дате. (Date.java:47) в DateDemo.main (DateDemo.java:19)

и месяц не отображается, только день и год , Пожалуйста помоги!!

+4

Отличное право на вопрос ... -1 – Tdorno

ответ

1

private static String[] monName; никогда не присваивается значение, поэтому, это null

Я «думаю» Вы хотите взять String[] name = {" ", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December"}; из метода getMonthName и назначить на monName вместо ...

private static final String[] MONTH_NAMES = String[] name = { 
      " ", 
      "January", 
      "February", 
      "March", 
      "April", 
      "May", 
      "June", 
      "July", 
      "August", 
      "September", 
      "October", 
      "November", 
      "December"}; 

И да, вам нужно будет переименовать monName, поскольку люди узнают MONTH_NAMES как константы

+0

T Хэнк, но что бы я сделал с помощью getMonthName? Я должен иметь это для кода. – Sammie

+0

Использовать 'MONTH_NAMES', а также ... – MadProgrammer

+0

Хорошо, я изменил его на то, что вы сказали, и мое getMonthName на другое {\t return Month_Names [num]; } } Он удалил ошибку, но она все еще показывает только день и год, но не месяц. Какие-либо предложения? – Sammie

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