В операторе switch каждый case
оценивает, равен ли входной параметр в switch(param)
этому случаю. Например, если бы я написал switch(3)
, то выполнил бы только case 3:
.
Здесь пара проблем. Во-первых, метод в вашем case
возвращает boolean
, но вы делаете переключатель на int
. Поэтому, когда код проверяет, соответствует ли входной параметр mark
isBetween(0,20)
, он пытается сравнить int
и boolean
. На самом деле вы этого не хотите. Вы хотите узнать, является ли mark
одним из значений 0, 1, 2, 3, 4, 5 .. 20. Если бы вы использовали здесь пример case, вам нужно было бы сравнить mark
с case
для каждого из этих значений ,
Во-вторых, как утверждает Эрик, вам нужно использовать статические значения в своих операциях case
. Это означает, что вы не можете вернуть функцию String
, так как она может меняться в зависимости от внутренних функций.
Кроме того, isBetween()
требует ввести число, которое хотите определить, между двумя другими. Прямо сейчас ваш код не имеет правильного количества входов. Метод должен также заявить, что он возвращает boolean
, как указывал Tiny. Определяя метод, вам всегда нужен тип возврата.
Лучший способ сделать это, вероятно, не использовать переключатель-случай, и будет выглядеть примерно так:
public static boolean isBetween(int x, int lower, int upper)
{
return lower <=x && x<=upper;
}
public void printMark(int mark){
if(isBetween(mark, 0, 20))
System.out.println("Grade is E");
else if(isBetween(mark, 21, 29))
System.out.println("Grade is D");
}
Поскольку вы должны использовать переключатель-случай, я бы настроить его так, это так :
private static final int GRADE_E = 0;
private static final int GRADE_D = 1;
public static boolean isBetween(int x, int lower, int upper)
{
return lower <=x && x<=upper;
}
private int getMarkCode(int markParam){
if(isBetween(markParam, 0, 20))
return GRADE_E;
else if(isBetween(markParam, 21, 29))
return GRADE_D;
}
public void printMark(int mark){
switch(getMarkCode(mark)){
case GRADE_E:
System.out.println("Grade is E");
break;
case GRADE_D:
System.out.println("Grade is D");
break;
}
}
Обратите внимание, что это длиннее первого и достаточно избыточно. Также обратите внимание, как я назвал коды, которые я использовал в инструкции case. Многие заявления о делах, которые вы видите хорошо написаны, не будут использовать числа, но вместо этого будут использовать описательные имена. Особенно, когда вы используете коды без какого-либо неотъемлемого значения, как я сделал здесь с 0, представляющим класс E и 1, представляющий оценку D, вы хотите описательное имя. Однако, как правило, вам следует избегать использования кодов и вместо этого использовать значение, которое пытается попытаться представить код, будь то строка, int или какой-либо тип объекта.
Вы можете дать только константы, как случай 0. или случай 20. Функции не являются позволил. –
Это просто невозможно с помощью переключателя. (За исключением чего-то безумного, как случай для всех чисел 0 ... 29 и провалов.) – Radiodef
Вам не нужен тип возврата в единственном методе, который должен быть 'boolean'. – Tiny