2012-03-02 2 views
0

나는 1 개월 동안 Java를 배웠다. 내 코드에 대한 질문이 있습니다. 뭔가 잘못되었습니다. 0을 누르면 결과에 "컴퓨터 승"과 "동점"의 두 가지 상황 만 있습니다. 제가 1과 2를 누르면, 그것은 단지 두 개 밖에 나오지 않습니다. 여기서 뭐가 잘못 됐니?가위 바위 종이 게임에 관한 자바 코드

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', 특히 배율을 계산하는 방법을 살펴보십시오. –

+0

이 숙제가 있습니까? 그렇다면 태그를 붙이십시오. –

+0

이것은 책의 질문입니다. 나는이 문제를 해결할 수 없었다. –

답변

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로 착각했다. 자, 문제가 무엇인지 이해했다. –

2

당신은 0에서 해결하기 위해 2로하지, 0에서 1로 무작위 정수를 생성하는, 당신은 대답을 주어 졌어

0

Math.random()*3을 수행하고이 코드 검토 아니지만, 이 제안을 코멘트에 넣을 수는 없습니다. 스위치의 3 가지 매우 유사한 하위 스위치 (실제로는 if-else 만 있으면됩니다)보다는 컴퓨터의 선택 사항을 여러 비트 오프셋하여 하나의 스위치로 결정할 수 있습니다 (2 개만 있으면됩니다) 세 가지 선택을 인코딩하는 것이지만, 4는 바이너리 리터럴이 아닌 16 진수를 사용해야 할 때 더 편리합니다.) 그리고 플레이어의 선택에 따라 ORing하여 두 동작을 모두 인코딩하는 숫자를 생성하십시오.

// 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"; 
    } 
} 
관련 문제