Несколько условий - есть ли "конд" в Java? - PullRequest
1 голос
/ 10 марта 2011

В рамках обучения написанию Java я обнаружил в Интернете функцию «case» для нескольких условий.

Проблема для меня в том, что эта функция сравнивает аргумент с конкретным числа, которые я использую в качестве условия, но что произойдет, если я хочу каждый раз сравнивать аргумент для другого диапазона чисел, Есть ли более элегантный способ, чем использовать много «если»? Что-то более похожее на синтаксис "cond" в схеме?

public class Assignment02Q03 {
public static void main(String[] args){
int grade=Integer.parseInt(args[0]);
if (grade >= 90) {
    System.out.println("A");
}else {
if (grade>=80 ){
    System.out.println("B");
}else {
    if (grade>=70){
        System.out.println("C");
    }else {
        if (grade>=60){
            System.out.println("D");
        }else { 
            System.out.println("F");
        }
        }
    }   
}   
}

}

Должно быть что-то более элегантное:)

Спасибо!

Ответы [ 6 ]

6 голосов
/ 10 марта 2011

Обычно записывается как:

if (grade >= 90) {
    System.out.println("A");
} else if (grade>=80 ) {
    System.out.println("B");
} else if (grade>=70) {
    System.out.println("C");
} else if (grade>=60) {
    System.out.println("D");
} else { 
    System.out.println("F");
}

Не то, чтобы в else if было что-то особенное.Скобки можно заменить одним оператором, в этом операторе if - else.Отступы не похожи ни на что другое в языке, но за ними следует легко следовать.

Для выражения есть также троичный оператор:

System.out.println(
    grade>=90 ? "A" :
    grade>=80 ? "B" :
    grade>=70 ? "C" :
    grade>=60 ? "D" :
    "F"
);
4 голосов
/ 10 марта 2011

В Java есть конструкции ifs, switch case и ternary operator (что является укороченным if). Ничего элегантного, я думаю:)

2 голосов
/ 10 марта 2011

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

1 голос
/ 10 марта 2011

В Java есть ООП и полиморфизм) Вы можете написать smt как

 ActionFactory.create(grade).execute()

 //returns some instance
 public static AbstractAction create(int grade){
      //can be based on Maps as @Ted Hopp mentioned
      if(grade >= 0){
           return new PositiveAction();
      } else {
           return new NegativeAction();
      }
 }
 //can be interface
 class AbstractAction{
     public abstract void execute();
 }
 class PositiveAction extends AbstractAction {
     public void execute(){Sout("positive");}
 }
 class NegativeAction extends AbstractAction {
     public void execute(){Sout("negative");}
 }

Это кажется более многословным, но оно работает в реальных задачах. Ява не для элегантных решений. Ява для работы. Почувствуй Яву)

1 голос
/ 10 марта 2011

Как и во многих других языках, вы можете использовать троичный if-тест.

String text = (1 < 10) ? "One is not greater than ten!" : "One is greater than ten";
1 голос
/ 10 марта 2011
if (a > b) 
{
  max = a;
}
else 
{
  max = b;
}

можно записать так ....

max = (a > b) ? a : b;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...