2013-03-07 7 views
0

Как сравнить элементы массива со скалярным значением?Как сравнить элементы массива со скалярным значением

Вот часть кода с ошибкой:

if(month != numMonth[]) 
    System.out.printf("\n not a valid month"); 
if (day != daysInMonth[] && day> daysOfMonth[month]) 
    System.out.printf("\n not a valid day"); 
if (year<1880 && year>2280) 
    System.out.printf("\n not a valid year"); 

В (day != daysInMonth[] && day> daysOfMonth[month]) выраж я получаю файл класса ожидаемую ошибку.

+0

'month! = NumMonth []' это даже компиляция? – Abubakkar

+0

'(день! = ДниInMonth [месяц] && день> daysOfMonth [месяц]' !!! –

ответ

0

Применение

if (month < 0 || month > 11) 

или

if (month < 1 || month > 12) 

в зависимости от того, начинается ли нумерация от нуля или одного из.

& с

0

Вы можете сравнить элемент массива с скаляр, а не весь массив. Кроме того, синтаксис вы используете действительна только во время объявления:

int numMonth[] = new int[10]; 
or 
int numMonth[] = {1,2,3}; 

and so on 

Для сравнения с скаляр вам нужно ссылаться на элемент, который вы хотите, чтобы сравнить его с:

// to compare with the 1st entry 
numMonth[0] == month; // with arrays being zero based 
// to compare with the 2nd entry 
numMonth[1] == month; 

and so on 
0

Я предлагая более простой вариант (ИМХО).

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

Прежде всего, утвердите годы. Они являются простейшими из валидаций в этой цепочке и, как и месяцы, не зависят от любого из введенных последовательных параметров. Последняя проверка, сделанная вами, становится первой в этом случае:

if (year < 1880 && year > 2280) 
    System.out.printf("\n not a valid year"); 

После проверки года проверяйте месяцы. Они также простое число, но вы должны определить, как вы их управляете. Я возьму диапазон 1 -> 12:

if(month < 1 || month > 12) 
    System.out.printf("\n not a valid month"); 

Наконец, вы строите дату с помощью Calendar. Таким образом, вы можете получить правильное количество дней, которые соответствуют определенному месяцу. Затем вы подтверждаете правильность.

Calendar cal = Calendar.getInstance(); 
cal.set(Calendar.YEAR, year); 
cal.set(Calendar.MONTH, month - 1); //Calendar manages the months 
            //from 0 to 11, that's why 
            //you need to substract 1 
int maxDays = cal.getActualMaximum(Calendar.DAY_OF_MONTH); 

maxDays содержит максимальное количество дней для данного месяца и года. Теперь у вас есть только проверить идентификатор входа для дня находится в диапазоне:

if (day < 1 || day > maxDays) 
    System.out.printf("\n not a valid day"); 

Таким образом, вам не нужно постоянно отслеживать дни в течение каждого месяца, и вы также управлять високосными ,

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