2012-11-01 67 views
1

我正在嘗試在簡單的java中創建一個cee-lo程序。我只是在學習。但是,當我到達我的即時w。 (我簡化了它的測試)它總是返回false。我似乎無法弄清楚爲什麼。它甚至顯示正確的數據,但是當它比較時它失敗了。不正確返回的方法中的布爾值(數組正式參數)

public class ceeLo 
{ 
    public static void main (String [] args) 
    { 
    Scanner scan= new Scanner (System.in); 
    int [] die = new int [3]; 
    int answer; 
    boolean roll = true; 
    boolean qualifed; 
    boolean instantW; 
    boolean instantL; 

    do 
    { 
     System.out.println("Roll the dice?"); 
     answer = scan.nextInt(); 
     if (answer == 0) 
     roll= false; 
     else 
     { 
     int i; 
     for (i = 0; i < die.length; i++) 
     { 
      die[i]= rollin(); 
      System.out.println(diceTxt(die[i])); 
     } 

     qualifed = (qualify (die)); 
     System.out.println("Qualified = " + qualifed); 
     instantW = (easyW (die)); 
     System.out.println("Instant win = " + instantW); 
     } 
    } 
    while (roll); 
    } 

    // Generate random numbers for the roll 
    public static int rollin() 
    { 
    Random rand = new Random(); 
    int die= rand.nextInt(6); 
    return die; 
    } 

    //Check if dice qualify with pair 
    public static boolean qualify (int [] die) 
    { 
    boolean qualify; 
    //Pair Qualifying roll 
    if (die[0] == die[1] || die[0] == die[2] || die[1] == die[2]) 
     qualify = true; 
    else 
     qualify = false; 
    return qualify; 
    } 

    //Check if instant win 
    public static boolean easyW (int [] die) 
    { 
    boolean instantW; 
    // show contents of die [x] for testing 
    System.out.println (die[0] + "" + die[1] + "" + die[2]); 
    if (die[0] > 2 && die [1] > 2 && die[2] > 2) 
      instantW = true; 
    else; 
     instantW = false; 
    return instantW; 
    } 
} 
+1

首先在最後一個分號之後有一個分號比不應該在這裏,easyW優於2的那三個值? – talnicolas

+0

趕上@talnicolas。始終在代碼塊周圍使用大括號。並在您的IDE中設置代碼以檢測此類問題。注意這個if/else塊可以用'instantW =(die [0]> 2 && die [1]> 2 && die [2]> 2);'替換。 –

回答

7

刪除分號後的其他;它應該只是別人

我猜的原因是,

instantW = false;被視爲單獨的語句時,沒有別的塊的一部分。這就是爲什麼instantW總是被分配到錯誤並返回false的原因。

使用{}定義塊總是更好,即使它們是單個襯墊。這是我的偏好。

正如Greg Hewgill所建議的那樣,使用單個語句instantW = die[0] > 2 && die [1] > 2 && die[2] > 2;會比if/else更好。

+5

+1。更好的是,'instantW = die [0]> 2 && die [1]> 2 && die [2]> 2;'會比'if'語句簡單。 –

+2

然後比較起來,這個方法可以只是'返回die [0]> 2 && die [1]> 2 && die [2]> 2;'而不是設置一個新的變量。只是另一個想法。 –

3

一種更好的方式來寫布爾方法真的像做

boolean easyW(int[] die) 
{ 
    return (die[0] > 2 && die[1] > 2 && die[2] > 2); 
} 

甚至更​​好(更普遍)

boolean easyW(int[] die) 
{ 
    for(int roll : die) 
    { 
     if(roll < 2) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

但在你的情況,你有一個;後您的其他。修正版本:

public static boolean easyW (int [] die) 
    { 
     boolean instantW; 
     // show contents of die [x] for testing 
     System.out.println (die[0] + "" + die[1] + "" + die[2]); 
     if (die[0] > 2 && die [1] > 2 && die[2] > 2) 
      instantW = true; 
     else 
      instantW = false; 
     return instantW; 
    }