2017-04-11 57 views
2

我想使用開關盒來選擇基於變量的條件, 但我收到錯誤。什麼是正確的過程呢?是否可以使用開關大小寫,還是應該使用嵌套的iffs?在Java中使用開關盒作爲條件語句

public class Grader { 
    // no attributes required 
    public Grader() { 
// no code required 
} 


public String grade(int mark) { 
    String grade = null; 
// code to determine grade goes here 
    switch (mark){ 
     //For marks 85-100, Grade is HD 
     case ((100>=mark>=85)): 
      grade="HD"; 
      break; 
     //For marks 75-84, Grade is D 
     case (mark>=75 && mark<=84): 
      grade="D"; 
      break; 
     //For marks 65-74, Grade is C 
     case (mark>=65 && mark<=74): 
      grade="C"; 
      break; 
     //For marks 50-64, Grade is P 
     case (mark>=50 && mark<=64): 
      grade="P"; 
      break; 
     //For marks 49-0, Grade is HD 
     case (mark<=49 && mark>=0): 
      grade="F"; 
      break; 






    } 
    return grade; 
} 
public boolean pass(int mark) { 
    boolean pass = false; 
// code to determine pass goes here 

    return pass; 
    } 
} 

+1

只要使用'if' /'else if' /'else if' /.../' else'。開關語句不會在Java中執行此操作。 –

+0

還要注意,只要知道方法的結果就可以簡單地返回,而不是讓你的'grade'局部變量。 –

回答

1

交換機只需要在它的情況下,常數值。在評估運行時間的情況下,您不能添加表達式。

這裏最好的是去傳統的if-else-if

public String grade(int mark) { 
     String grade = null; 
     // code to determine grade goes here 
     if (mark >= 100 && mark <= 85) { 
      grade = "HD"; 
     } else if (mark >= 75 && mark <= 84) { 
      grade = "D"; 
     } else if (mark >= 65 && mark <= 74) { 
      grade = "C"; 
     } else if (mark >= 50 && mark <= 64) { 
      grade = "P"; 
     } else if (mark <= 49 && mark >= 0) { 
      grade = "F"; 
     } else { 
      grade = "Not found"; 
     } 
     return grade; 
    } 
+0

這段代碼也不會編譯,btw ... –

+0

我認爲最好是修正OP所提供的代碼......在這種情況下,沒有*需要*它是僞代碼。 –

+0

@JonSkeet修正了我的密碼:) –

0

不幸的是,Java沒有開關的範圍如Javascript了,所以要得到你想要的結果將是10分的mark並在必要時圍捕(例如8.5變爲9一種方式,等等。)。然後,每個數字從0到10,有像這樣爲它的情況下,

double markDividedByTen = mark/10.0; 
int mark = (int) (markDividedByTen + 0.5); //round to whole number 
switch (mark){ 
     case 10: 
      grade="HD"; 
      break; 
     case 9: 
      grade="HD"; 
      break; 
     case 8: 
      grade="D"; 
      break; 
     case 7: 
      grade="C"; 
      break; 
     case 6: 
      grade="P"; 
      break; 
     case 5: 
      grade="P"; 
      break; 
     case 4: 
      grade="F"; 
      break; 
     case 3: 
      grade="F"; 
      break; 
     case 2: 
      grade="F"; 
      break; 
     case 1: 
      grade="F"; 
      break; 
     case 0: 
      grade="F"; 
      break; 
    } 

用這種方法唯一的問題是,從45到49的標記在技術上收到一個「P」級,但我只是想向您展示if/else if語句仍使用switch語句的替代方法。

0

你可以使用if-else語句作爲開關不能有表達式。 你可以使用它。

public class Grader { 
    // no attributes required 
    public Grader() { 
// no code required 
} 


public String grade(int mark) { 
    String grade = null; 
// code to determine grade goes here 
    if(mark>=85 && mark<=100) 
    { 
    grade = "HD"; 
    } 
    else if(mark>=75 && mark<=84) 
    { 
    grade = "D"; 
    } 
    else if(mark>=65 && mark<=74) 
    { 
    grade = "C"; 
    } 
    else if(mark>=50 && mark<=64) 
    { 
    grade = "P"; 
    } 
    else if(mark>=0 && mark<=49) 
    { 
    grade = "F"; 
    } 
    return grade; 

} 
public boolean pass(int mark) { 
    boolean pass = false; 
// code to determine pass goes here 

    return pass; 
    } 
} 
0

的問題是,您要產生boolean值,同時檢查是否該語句是比一些values.In switch小還是大,如果通過integer價值型迭代你無法控制它。

if (100 >= mark && 85 <= mark) { 
     // grade ... 
    } else if (84 >= mark && 75 <= mark) { 
     // grade ... 
    } else if (74 >= mark && 65 <= mark) { 
     // grade ... 
    } else if (64 >= mark && 50 <= mark) { 
     // grade ... 
    } else if (49 >= mark && 0 <= mark) { 
     // grade ... 
    } else if (-1 >= mark || 101 <= mark) { 
     // Error,mark cannot be lower than 0 and higher than 100 
    } 

這應該解決您的問題。但還有一些饒你從多個檢查statements.Check enumsmapping技術

0

針對這種情況許多方法,絕對if-else語句。 你的switch語句是錯誤的順便說一句。