2012-09-11 42 views
0

好吧,我正在嘗試編寫這段代碼,但我一直在收到這個愚蠢的錯誤。我不知道我做錯了什麼,所以也許你們的專家可以幫助我。Java錯誤缺失返回資料

import java.util.*; 

public class School 
{ 
Random randQuest = new Random(); 

int userAnswer; 

public void createQuestion() 
{ 

    int range = 10; // range of numbers in question 

    int num1 = randQuest.nextInt(range); 
    int num2 = randQuest.nextInt(range); 

    userAnswer = num1 * num2; 

    System.out.printf("How much is %d times %d?\n", 
     num1, num2); 

} 

// prompt comment 
public String promComm(boolean answer) 
{ 
    if (answer) 
    { 
     switch (randQuest.nextInt(1)) 
     { 

     case 0: 
      return("Very Good!"); 

     } 

     switch (randQuest.nextInt(1)) 
     { 

     case 0:     
      return("No. Please try again."); 

     } 
    } 
} 

}

+0

'return'不使用括號。 –

+0

使用下面的任何正確答案解決問題後,請查閱[本文](http://www.informit.com/articles/article.aspx?p=1392524),其中Bob Martin指出應該從不編寫採用布爾參數的方法。這只是不好的做法。我知道這是一個無法回答的問題,但是你使用帶有布爾參數的方法是首先讓你陷入困境的原因!所以,希望你會發現這個技巧很有用。乾杯。 –

回答

1

在方法promComm如果answerfalse該方法不返回任何值。 相同的,如果randQuest.nextInt(1) != 0.

應該是這樣的:

public String promComm(boolean answer){ 
    if (answer){ 

     switch (randQuest.nextInt(1)){  
      case 0: 
       return("Very Good!"); 
     } 

     switch (randQuest.nextInt(1)){ 
      case 0:     
       return("No. Please try again."); 
     } 

     return "Some value"; 

    }else 

     return "Some value"; 
    } 
1

你的方法promComm應該在每一個它並不情況下返回一個字符串。修復它以添加默認返回語句的最簡單方法。

public String promComm(boolean answer){ 
    if (answer){ 
     //... 
    } 
    return "default value when answer is false."; 
} 
1

promComm方法返回的字符串,但如果切換值不爲0,然後你的函數將返回一無所有 - 沒有默認的return語句。

1

嘗試的if-else語句

public String promComm(boolean answer){ 

    if(answer){ 
     ... 

    }else{ 

     ... 
    } 

return ""; //empty string <-- you are missing a default return statement 
} 
+0

你不應該提供一個理由嗎?爲什麼? – SiB

+0

由於相同的原因,此代碼不會編譯。 – zerkms

+0

@zerkms:你可以試試這個 –

1

返回一個字符串結果。 在你的代碼中,如果答案是假的,promComm()不會碰到if block和 永遠不會返回值!

除了不建議在一個方法中使用多個返回!

例如,你可以通過避免這種情況:

public String promComm(boolean answer) { 
    String returnValue = "Answer is false"; //or = "" 
if (answer) 
{ 
    switch (randQuest.nextInt(1)) 
    { 

    case 0: 
     returnValue = "Very Good!"; 

    } 

    switch (randQuest.nextInt(1)) 
    { 

    case 0:     
     returnValue = "No. Please try again."; 

    } 
} 
return returnVal; 
} 
1

當一個方法有一個返回類型所有的碼流必須返回一個值後寫這篇

public String promComm(boolean answer) 
    { 
     if (answer) 
     { 
      switch (randQuest.nextInt(1)) 
      { 
       case 0: return("Very Good!"); 
      } 
      switch (randQuest.nextInt(1)) 
      { 
       case 0: return("No. Please try again."); 
      } 
     } 
     return ""; 
    }