2012-03-02 106 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"; 
    } 
}