2015-05-27 4 views
-3

Я знаю, что это может быть действительно глупый вопрос, и я знаю, что я должен импортировать класс для этого, но мне очень хотелось бы знать, что является ошибкой в ​​следующем коде. Я беру Java-класс, и мне очень хотелось бы получить некоторую помощь.Несколько операторов IF; Месяцы

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

я получаю

*./Root/Main.java:16: error: '.class' expected 
     if(int m = 1){ 
       ^* 

Является ли проблема с именем строки?

+1

В следующий раз перейдите на сайт http://codereview.stackexchange.com, который более подходит для таких вопросов. Кроме того, я думаю, что вы занижены, потому что уже есть много существующих ресурсов, включая этот сайт, на котором вы могли бы найти ответ самостоятельно. – coredump

+0

Спасибо, я новичок здесь и хорошо, вы знаете, что делают noobs .... – TimberX

ответ

1

Ваш если заявление переопределения переменной m. Сравнение должно выглядеть следующим образом: if (m == 1). Исправленный код будет выглядеть так:

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

Вы пытаетесь определить новую целочисленную переменную m внутри условия if. Вы должны сделать это:

int m = 1; 
String month; 
if(m == 1) 
{ 
     month = "January"; 
} 

и т.д. Примечание я извлекал Int, и переменил = к == (т.е. проверка равенства, а не присвоение)

1

= является операцией присваивания, == является оператором сравнения равенства. изменение if(int m = 1){ к if(int m == 1){

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

int m = 1; 
String month = ""; 

// stores months names in order 
String[] months = {"January", "February", "March"....} 
// gets the corresponding name by index 
month = months[m-1]; 
+0

Я предпочел бы хранить 'months' как конечный статический член класса, а не определять его как локальную переменную в функции. Возможно, я ошибаюсь, но я не думаю, что компиляторы Java действительно признают, что 'months' на самом деле является константой и не выделять ее каждый раз, когда вызывается функция. – coredump

+0

'Enum Month' является лучшим – haifzhan

1

Почему .class?

Причина, по которой ожидается .class, заключается в том, что Java ожидает найти значение, в котором вы указали тип int. Однако типы не могут использоваться в качестве значений.

Единственный возможный способ, когда имеет смысл иметь значение, начиная с int, когда мы обращаемся к его атрибуту .class: компилятор предполагает, что вы хотели это сделать.

Инлайн декларация

Есть места, где вы можете поместить объявления встроенных переменные, как в for петель. То, что следует за if, должно быть выражением, поэтому объявления запрещены.

Используйте равенство == оператор

В противном случае, вы будете назначить правую (LHS) от = к m, который не то, что вы хотите.

Не используйте так много if

Поскольку вы используете целые числа, вы можете легко использовать переключатель заявление:

switch (m) { 
case 1: month="January"; break; 
case 2: month="February"; break; 
... 
} 

переключатели в диапазоне целых чисел в виде a..b обычно составляются в виде прямой доступ, как если бы вы использовали массив. Конечно, вы также можете определить статический конечный массив месяцев и получить доступ к нему, используя m в качестве индекса.

Редактировать: Довольно интересно, пример для switch заявления в Java documentation имеет дело с вашей конкретной проблемой.

Enum Месяц

Вы сказали, что «я должен импортировать класс для этого», а также эффективно, как и любезно намекают haifzan, вам нужно всего лишь использовать existing enum.

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