2013-08-25 3 views
-1

Я новичок в языке программирования Java. Я не смог написать код для этой программы, потому что я не являюсь экспертом в логических операторах. Я просто хотел узнать, как вы, люди, программируете этот вопрос в книге, потому что я не могу понять, как заставить эту программу работать без ветки if/else. Помощь была бы оценена, извините, если вы, ребята, раздражены этим вопросом.Boolean, if methods,

Вопрос в книге,

Напишите программу, которая просит пользователя ввести в месяц (1 за январь, 2 за февраль и т.д.), а затем печатает количество дней в месяце. В феврале напечатайте «28 дней».

Enter a month: 5 
    30 days 

Используйте класс месяц с методом общественного ИНТ GetLength() Не используйте отдельный если/другое отделение для каждого месяца. Используйте булевы операторы.

Спасибо!

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

Благодаря

ответ

2

Предполагая, что вы не должны иметь дело с високосные годы, ваш Month класс может выглядеть примерно так:

public class Month { 
    private int monthNumber; 

    public Month(int monthNumber) { 
     if (monthNumber < 1 || monthNumber > 12) { 
      throw new IllegalArgumentException(
       "Month number must be between 1 and 12"); 
     } 
     this.monthNumber = monthNumber; 
    } 

    public int getLength() { 
     return monthLengths[monthNumber - 1]; // indexes start at 0 
    } 

    private static int[] monthLengths = { 
     31, // January 
     28, // February 
     31, // March 
     . . . 
    } 
} 

остальная часть кода (запрашивая пользователя, получение ввода, проверка на наличие ошибок, печатая ответ) оставлена ​​в качестве упражнения.)

P.S. Я не могу представить, где Boolean входит в это вообще.

0

Используйте карту с ключом, представляющим собой целочисленное значение, введенное пользователем, а значение - количество дней в этом месяце. Например:

Hashmap<Integer, Integer> map = new Hashmap<Integer, Integer>(); 
map.put(1, 31); 
... 
map.put(12, 31); 

Затем попросите вход и сделать что-то вроде:

int input = ...; 
if (map.containsKey(input)) { 
    System.out.println(map.get(input)); 
} 
else { 
    System.out.println("Invalid month input"); 
} 
2

Если вы хотите сделать что-то для указанных номеров вы можете использовать что-то вроде

if (number == 1){ 
    doSomething(); 
} else if (number == 3){ 
    doSomething(); 
} else if (number == 5){ 
    doSomething(); 
} 

Но поскольку этот подход запрещен

Do no t используйте отдельный ветвь if/else для каждого месяца.

Использование булевых операторов.

вам нужно использовать логическое ИЛИ || оператор как

if (number==1 || number == 3 || number == 5){ 
    doSomething(); 
} 

Теперь попробуйте использовать это в течение нескольких месяцев.

1

Я whould сделать что-то вроде этого:

public class Month 
{ 
int month; 
public Month(int _month) 
{ 
    this.month = _month; 
} 

public int getLength() 
{ 
if(this.month == 2) { return 28 } 
if(this.month<8) 
{ 
    if((this.month%2) == 1) 
    { 
     return 31 
    } 
    else 
    { 
     return 30 
    } 
} 
else 
{ 
    if((this.month%2) == 1) 
    { 
     return 30 
    } 
    else 
    { 
     return 31 
    } 
} 

}}

EDIT. Прочитав обновленный вопрос из книги, я думаю, что они ищут что-то вроде этого.

public int getLength() 
{ 
if(this.month == 2) {return 28;} 
if(this.month == 1 || this.month == 3 || this.month == 5 || this.month == 7 || this.month == 8 || this.month == 10 || this.month ==12){ return 31;} 
if(this.month == 4 || this.month == 6 || this.month == 9 || this.month == 11){return 30;} 
} 

Но ответы других даются лучше в реальной жизни.