Есть ли способ сжать этот метод сравнения нескольких результатов? - PullRequest
0 голосов
/ 09 марта 2019

Недавно узнав, как создавать классы, объекты, методы в этих классах, как получить к ним доступ из основного метода, и почему это важно, чтобы вам не всегда приходилось переписывать код / ​​создавать короткие строки кода / сохранятьпамять / и т.д., я столкнулся с небольшой проблемой.

Итак, я сделал простую программу Rock Paper Scissors.По сути, каждый раз, когда программа запускается, программа принимает пользовательский ввод - присваивает ее переменной, назначает случайное число другой переменной и сравнивает два ввода, используя несколько операторов if для определения результата.Вот где моя проблема.

Мне сказали, что класс и связанные с ним методы обычно очень широки, но я чувствую, что мой метод, используемый для сравнения двух переменных, слишком короткий и может быть уменьшен /сжатый до гораздо более простого и эффективного кода.

Я не знаю, как этого добиться.Я не уверен, что можно добавить дополнительные переменные, упростить сравнение или что-то в этом роде, или, возможно, убрать некоторые вещи / добавить новые типы кода и т. Д. Дело в том, что я хочу сделать этот код меньшекоренастый и более эффективный.

В коде у меня есть два способа получения точных значений.У меня есть ваши типичные заявления if, но я также сделал заявление о переключении.Оба дают мне одинаковые результаты, но я просто подумал, что оператор switch будет легче читать.

ТАКЖЕ, Я понимаю, что классы и методы, вероятно, бесполезны при создании игры Rock Paper Scissors такой простоты, но я просто хотел получить практику, а что нет.

Вот мой код:

вместе с веб-сайтом, на котором вы можете запустить его: https://repl.it/@ANGELRAMIREZ6/Rock-Paper-Scissors-UPGRADED

import java.util.Scanner;
import java.util.Random;

class Main {
  public static void main(String[] args) {
    action object = new action();

    System.out.println("\nYou will now play Rock Paper Scissors with a Computer.");
    object.getUserChoice();
    object.getComputerChoice();
    object.compareChoices();
  }
}

class action {
  Scanner sc = new Scanner(System.in);
  Random rand = new Random();
  int computerChoice;
  int userChoice; 

  int getUserChoice() {
    System.out.println("\nDo you choose (0)Rock, (1)Paper, (2)Scissors?");
    userChoice = sc.nextInt();
    return userChoice;
  }

  int getComputerChoice() {
    computerChoice = rand.nextInt(2);
    return computerChoice;
  }

  /*
  void compareChoices() {
    //IF YOU PICK ROCK
    if (userChoice == 0) {
      if (computerChoice == 1) {
        System.out.println("You lose!\nYou picked rock and the computer picked paper.");
      }
      if (computerChoice == 2) {
        System.out.println("You win!\nYou picked rock and the computer picked scissors.");
      }
      if (computerChoice == 0) System.out.println("It's a draw! You both picked rock!");
    }

    //IF YOU PICK PAPER
    if (userChoice == 1) {
      if (computerChoice == 0) {
        System.out.println("You win!\nYou picked paper and the computer picked rock.");
      }
      if (computerChoice == 2) {
        System.out.println("You lose!\nYou picked paper and the computer picked scissors.");
      }
      if (computerChoice == 1) System.out.println("It's a draw! You both picked paper!");
    }

    //IF YOU PICK SCISSORS
    if (userChoice == 2) {
      if (computerChoice == 1) {
        System.out.println("You win!\nYou picked scissors and the computer picked paper.");
      }
      if (computerChoice == 0) {
        System.out.println("You lose!\nYou picked scissors and the computer picked rock.");
      }
      if (computerChoice == 2) System.out.println("It's a draw! You both picked scissors!");
    }
  }
  */
  void compareChoices() {
    switch (userChoice) {
      //IF YOU PICK ROCK
      case 0:
      if (computerChoice == 1) {
        System.out.println("You lose!\nYou picked rock and the computer picked paper.");
      }
      if (computerChoice == 2) {
        System.out.println("You win!\nYou picked rock and the computer picked scissors.");
      }
      if (computerChoice == 0) System.out.println("It's a draw! You both picked rock!");
      break;

      //IF YOU PICK PAPER
      case 1:
      if (computerChoice == 0) {
        System.out.println("You win!\nYou picked paper and the computer picked rock.");
      }
      if (computerChoice == 2) {
        System.out.println("You lose!\nYou picked paper and the computer picked scissors.");
      }
      if (computerChoice == 1) System.out.println("It's a draw! You both picked paper!");
      break;

      //IF YOU PICK SCISSORS
      case 2:
      if (computerChoice == 1) {
        System.out.println("You win!\nYou picked scissors and the computer picked paper.");
      }
      if (computerChoice == 0) {
        System.out.println("You lose!\nYou picked scissors and the computer picked rock.");
      }
      if (computerChoice == 2) System.out.println("It's a draw! You both picked scissors!");
      break;
    }
  }
}

1 Ответ

0 голосов
/ 09 марта 2019

честно, хотя это немного длинно, но его читабельно и для меня читаемость кода так важна. но если вы хотите сделать его немного чище (и более читабельным), есть несколько предложений.

вместо (0)Rock, (1)Paper, (2)Scissors было бы лучше использовать enum вместо. человеку будет намного легче читать.

также вы можете принимать там сообщения о победе / поражении. это значительно облегчит дальнейшие изменения, потому что вы знаете, где они находятся.

в вашем выражении switch вместо нескольких if создайте метод, который принимает 2 параметра (например, userChoice - AIChoice) и затем возвращает выигравшего. я имею в виду, вместо того, чтобы сравнивать их прямо в switch, взять их где-то еще и просто заменить эти if с вызовом метода.

Надеюсь, это поможет вам:)

...