Java-код об игре «ножницы-бумага» - PullRequest
0 голосов
/ 02 марта 2012

Я выучил Java в течение 1 месяца.У меня есть вопрос по поводу моего кода.Что-то не так. Если я нажму 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);
 }
}

Ответы [ 3 ]

3 голосов
/ 02 марта 2012

Да, я также считаю, что проблема связана с генерацией случайных чисел.При работе с целыми числами я предпочитаю использовать этот метод, потому что нет округления или приведения:

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;
2 голосов
/ 02 марта 2012

Вы генерируете случайные целые числа от 0 до 1, а не от 0 до 2. Чтобы исправить, выполните Math.random()*3

0 голосов
/ 02 марта 2012

Вам дали ответ, и это не проверка кода, но я не могу уместить это предложение в комментарии. Вместо трех очень похожих суб-переключателей коммутатора (что и есть у вас, просто с 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";
  }
}
...