2012-03-02 110 views
0

我已經學了1個月的Java。我有一個關於我的代碼的問題。 有什麼問題。如果我按0,結果只有「電腦贏」和「聯繫」兩種情況。所以當我按1和2時,它只出現兩個。這裏有什麼問題?關於剪刀岩石紙遊戲的Java代碼

import java.util.Scanner; 
public class Hm3 { 
public static void main (String[] args) { 
    int Computer=0,Player=0,tie=0,compic=0,pscore=0;tie=0; 
    int end = 0; 
    Scanner scan = new Scanner(System.in); 
    while (end < 3) { 
     System.out.print("Enter 0 for Scissors, 1 for Rock, and 2 for Paper : "); 
     pscore = scan.nextInt(); 
     compic = (int)(Math.random()*2); 

     switch (pscore){    
     case 0 : 
      if (compic == 0){ 
       System.out.println("Tie"); 
       tie++; 
      }else if (compic == 1){ 
       System.out.println("Computer Win"); 
       Computer++; 
      }else{ 
       System.out.println("Player Win"); 
       Player++; 
       end++; 
      } 
      break; 
     case 1 : 
      if (compic == 0){ 
       System.out.println("Player Win"); 
       Player++; 
       end++; 
      }else if (compic == 1){ 
       System.out.println("Tie"); 
       tie++; 
      }else{ 
       System.out.println("Computer Win"); 
       Computer++; 
      }break; 
     case 2 : 
      if (compic == 0){ 
       System.out.println("Computer Win"); 
       Computer++; 
      }else if (compic == 1){ 
       System.out.println("Player Win"); 
       Player++; 
       end++; 
      }else{ 
       System.out.println("Tie"); 
       tie++; 
      }break; 
     default :    
      System.out.println("The wrong value");    
      break; 
     }  
    } 
    System.out.println(""); 
    System.out.println("The player wins : " + Player); 
    System.out.println("The computer wins : " + Computer); 
    System.out.println("Tie : " + tie); 
} 
} 
+0

看看你如何計算'compic',特別是你的乘數。 – 2012-03-02 00:13:28

+0

這是功課嗎?如果是這樣,請標記爲這樣。 – 2012-03-02 00:15:29

+0

這是本書中的一個問題。我無法解決這個問題。 – 2012-03-02 02:29:07

回答

3

是的我也相信問題出在你的隨機數上。當整數打交道,我更喜歡,因爲沒有倒圓或鑄造涉及使用此方法:

Random random = new Random(); //create a random object 

random.nextInt(3); //will return a random integer from 0 to 2 

在nextInt()方法的括號中的數字是範圍,如果你想要去的1到3只改爲

random.nextInt(3) + 1; 
+0

謝謝:)我誤認爲隨機2是從0到2.現在,我明白了問題所在。 – 2012-03-02 02:26:00

2

您是從0開始產生隨機整數1,而不是從0到2要解決,做到Math.random()*3

0

你已經給出了答案,這不是代碼審查,但我在評論中不適合這個建議。而不是三個非常相似的交換機的子交換機(這是你有效的,只有if-else),你可以通過一個開關來決定這一點,通過偏移計算機的選擇位數(2是你所需要的對三種選擇進行編碼,但當你必須使用十六進制而不是二進制文字時,4更方便),並將其與玩家選擇進行或運算以產生編碼這兩種動作的數字。

// 0:scissors, 1:rock, 2:paper 
private String winner(int player, int computer) { 
    switch (player | (computer<<4)) { 
    case 0: 
    case 0x11: 
    case 0x22: 
     return "Tie"; 
    case 0x02: // computer:scissors, player:paper 
    case 0x10: 
    case 0x21: 
     return "Computer wins"; 
    case 0x01: 
    case 0x12: 
    case 0x20: 
     return "Player wins"; 
    default: 
     return "error"; 
    } 
}