1

作为学习编写 Java 的一部分,我在网上找到了switch针对多种情况的声明。

对我来说,这个语句的问题在于它将参数与我用作cases 的单个数字进行比较,但是如果我想根据参数所属的值范围来区分流怎么办?

有没有比使用很多ifs 更优雅的方式?我正在寻找类似Schemecond中的语句。

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");
               }
            }
         }  
      } 
   }
}

一定有更优雅的东西:)

谢谢!

4

6 回答 6

7

一般写成:

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"
);
于 2011-03-10T20:15:53.417 回答
5

Java里面有,ifs构造switch caseand ternary operator(这是一个缩短的if)。我猜没有什么优雅的:)

于 2011-03-10T19:53:53.287 回答
2

语言中没有任何内容。对于简洁和快速的代码,您可以创建一个 Map 将您的测试值映射到RunnableCallable操作。但是,这往往有点不透明,因为您必须在代码中的其他地方查看有关地图中内容的信息。

于 2011-03-10T19:55:35.283 回答
1
if (a > b) 
{
  max = a;
}
else 
{
  max = b;
}

可以这样写......

max = (a > b) ? a : b;
于 2011-03-10T19:55:57.170 回答
1

像许多其他语言一样,您可以使用三元 if 测试。

String text = (1 < 10) ? "One is not greater than ten!" : "One is greater than ten";
于 2011-03-10T19:57:51.477 回答
1

Java中有OOP和多态性)你可以像这样写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");}
 }

它看起来更冗长,但它适用于实际任务。Java 不适合优雅的解决方案。用于工作的 Java。感觉Java)

于 2011-03-10T20:19:18.693 回答