2011-03-10 35 views
1

作爲學習編寫Java的一部分,我在網絡上找到了多個條件的「case」函數。多個條件 - java中是否存在「cond」?

使用此功能爲我的問題是,它的參數比較具體 數字,我作爲一個條件使用,但是如果我想每次都比較參數的不同範圍的數字會發生什麼, 是有更多優雅的方式比使用很多「如果」? 更像是計劃中的「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"); 
     } 
     } 
    } 
} 
} 

}

一定有什麼更優雅:)

謝謝!

+4

你能展示一個你不喜歡的代碼片段的例子嗎?你希望它看起來像什麼? – Ramy 2011-03-10 19:53:25

+0

Sure Ramy,我會用這種方式完成代碼的編寫,然後我會編輯我的問題。 – 2011-03-10 20:00:02

回答

6

一般寫爲:

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

Java有所述ifsswitch case構建體和ternary operator(其被縮短if)。沒有什麼優雅,我猜:)

2

沒有什麼內置的語言。對於簡潔和快速的代碼,您可以創建一個映射,將您的測試值映射到RunnableCallable操作。但是,這往往有點不透明,因爲您必須查看代碼中的其他地方以瞭解地圖中的內容。

+1

+1。我認爲這是將許多條件表達式反映到Java的正確方法。但它應該是'LinkedHashMap',因爲順序問題。 – 2011-03-10 20:05:38

+0

@Stas - 當然,測試訂單有時很重要。我沒有想過這個。它們通常無關緊要(當測試是相互排斥的,就像在一個沒有落空的開關中一樣),但當訂單確實重要時,測試必須被重寫爲互斥。 – 2011-03-10 20:16:49

+0

當然,在實際情況下,訂單大多並不重要。但在計劃'cond'它metters) – 2011-03-10 20:23:26

1
if (a > b) 
{ 
    max = a; 
} 
else 
{ 
    max = b; 
} 

可以這樣寫....

max = (a > b) ? a : b; 
+1

難道你的意思是'可以寫'? – 2011-03-10 20:00:14

+0

是的....好 – Holograham 2011-03-10 20:35:50

1

像許多其他的語言,你可以使用一個三元如果測試。

String text = (1 < 10) ? "One is not greater than ten!" : "One is greater than ten"; 
1

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

似乎更詳細的,但它在實際任務中工作。 Java不適用於優雅的解決方案。 Java的工作。感覺Java)

相關問題