2016-10-10 4 views
1

Одним из требований является метод getMonthName, который возвращает имя, если месяц, т.е. январь равен 1. И toString, который возвращает имя месяца (представление строки), и я просто обеспокоены тем, что есть более простой способ для того, что я делаю, чем это:Мне нужно создать класс месяца в Java

import java.util.Scanner; 
import java.io.*; 
public class Month { 
    private int monthNum = 0; 
    private String monthName; 
    String monthOne = "JANUARY"; 
    String monthTwo = "FEBRUARY"; 
    String monthThree = "MARCH"; 
    String monthFour = "APRIL"; 
    String monthFive = "MAY"; 
    String monthSix = "JUNE"; 
    String monthSeven = "JULY"; 
    String monthEight = "AUGUST"; 
    String monthNine = "SEPTEMBER"; 
    String monthTen = "OCTOBER"; 
    String monthEleven = "NOVEMBER"; 
    String monthTwelve = "DECEMBER"; 
    //CONSTRUCTORS 
    public Month() 
    { 
     monthNum = 1; 
    } 
    public Month(int monthNum) 
    { 
     this.monthNum = monthNum; 
     if ((monthNum > 12) || (monthNum <1)) 
     { 
      monthNum = 1; 
     } 
    } 
    public Month(String monthOne, String monthTwo, String monthThree, String monthFour, String monthFive, String monthSix, String monthSeven, 
      String monthEight, String monthNine, String monthTen, String monthEleven, String monthTwelve) 
    { 
     monthName.toUpperCase(); 

     if (monthName.equals(monthOne)) 
     { 
      monthNum = 1; 
     } 
     else if (monthName.equals(monthTwo)) 
     { 
      monthNum = 2; 
     } 
     else if (monthName.equals(monthThree)) 
     { 
      monthNum = 3; 
     } 
     else if (monthName.equals(monthFour)) 
     { 
      monthNum = 4; 
     } 
     else if (monthName.equals(monthFive)) 
     { 
      monthNum = 5; 
     } 
     else if (monthName.equals(monthSix)) 
     { 
      monthNum = 6; 
     } 
     else if (monthName.equals(monthSeven)) 
     { 
      monthNum = 7; 
     } 
     else if (monthName.equals(monthEight)) 
     { 
      monthNum = 8; 
     } 
     else if (monthName.equals(monthNine)) 
     { 
      monthNum = 9; 
     } 
     else if (monthName.equals(monthTen)) 
     { 
      monthNum = 10; 
     } 
     else if (monthName.equals(monthEleven)) 
     { 
      monthNum = 11; 
     } 
     else 
     { 
      monthNum = 12; 
     } 
    } 


    //METHODS 
    public void setMonthNum(int monthNum) 
    { 
     this.monthNum = monthNum; 
     if ((monthNum >12) || (monthNum<1)) 
     { 
      monthNum = 1; 
     } 
    } 

    public int getMonthNumber() 
    { 
     return monthNum; 
    } 

    public String getMonthName() 
    { 
     if (monthNum == 1) 
     { 
      return "January"; 
     } 
     else if (monthNum == 2) 
     { 
      return "February"; 
     } 
     else if (monthNum == 3) 
     { 
      return "March"; 
     } 
     else if (monthNum == 4) 
     { 
      return "April"; 
     } 
     else if (monthNum == 5) 
     { 
      return "May"; 
     } 
     else if (monthNum == 6) 
     { 
      return "June"; 
     } 
     else if (monthNum == 7) 
     { 
      return "July"; 
     } 
     else if (monthNum == 8) 
     { 
      return "August"; 
     } 
     else if (monthNum == 9) 
     { 
      return "September"; 
     } 
     else if (monthNum == 10) 
     { 
      return "October"; 
     } 
     else if (monthNum == 11) 
     { 
      return "November"; 
     } 
     else 
     { 
      return "December"; 
     } 
    } 

    public String toString() 
    { 
     if (monthNum == 1) 
     { 
      return "January"; 
     } 
     else if (monthNum == 2) 
     { 
      return "February"; 
     } 
     else if (monthNum == 3) 
     { 
      return "March"; 
     } 
     else if (monthNum == 4) 
     { 
      return "April"; 
     } 
     else if (monthNum == 5) 
     { 
      return "May"; 
     } 
     else if (monthNum == 6) 
     { 
      return "June"; 
     } 
     else if (monthNum == 7) 
     { 
      return "July"; 
     } 
     else if (monthNum == 8) 
     { 
      return "August"; 
     } 
     else if (monthNum == 9) 
     { 
      return "September"; 
     } 
     else if (monthNum == 10) 
     { 
      return "October"; 
     } 
     else if (monthNum == 11) 
     { 
      return "November"; 
     } 
     else 
     { 
      return "December"; 
     } 
    } 
} 

Am я что-то отсутствует, или это лучший способ на моем уровне, чтобы сделать это?

+2

Да, возможно, посмотрите на массив. Например, «месяц [11] =« ноябрь »;' – markspace

+1

Или используйте перечисление. –

+0

Каждый раз, когда у вас есть список переменных с именами типа 'somethingOne',' somethingTwo', 'somethingThree', ..., это явный признак того, что вам нужно думать о массивах. (Или какой-либо другой объект коллекции.) – ajb

ответ

0

Вот несколько советов, чтобы улучшить свой класс:

  1. использовать KeyValuePair (например, map) для хранения списка месяца, так как это было бы легко поддерживать и получать информацию.

  2. Если вы используете коллекцию KeyValuePair вы можете получить доступ к месяцу используя идентификатор непосредственно, а не с помощью вложенных если заявления. (Как вы это делали в getMonthName() и ToString() метод)

0

Это просто

class Month { 

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

    private int monthNumber; 

    public Month(int n) { 

     if (n < 1 || n > 12) { 
      monthNumber = 1; 
     } else { 
      monthNumber = n; 
     } 
    } 

    public String getMonthName() { 
     return monthNumber[monthNumber - 1]; 
    } 

    @Override 
    public String toString() { 
     return getMonthName(); 
    } 
} 
0

Другим подходом, который вы можете использовать, является HashMap, где ключ будет номером месяца, а его значением является его имя. Используя HashMap, вы также можете получить ключ, основанный на значении и наоборот, который, кажется, вы хотите сделать. Также старайтесь избегать слишком многого другого. Вместо этого вы можете использовать переключатель.

1

Если необходимо реализовать класс месяц самостоятельно, то смотреть в enums, в противном случае ЗАКАНЧИВАТЬ документы для java.time.Month - попробовать что-то вроде этого ...

import java.time.Month; 

public Month getMonthName(int monthNum) 
{ 
    return Month.of(monthNum); 
} 

Или просто ...

System.out.println(Month.of(monthNumber)); 
+0

Я уверен, что это какое-то школьное задание, поэтому использование стандартных стандартных классов не соответствует требованиям –

+0

Да, я хотел чтобы делать это, но мне нужно его самостоятельно создать – DanK

+0

ОК в этом случае посмотрите на перечисления (ссылка указана в верхней части моего ответа). Это учебник, в котором вы могли бы использовать их – wfunston

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