Есть ли способ сжать этот метод сравнения нескольких результатов?

#java #class #variables #methods #return

#java #класс #переменные #методы #Возврат

Вопрос:

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

Итак, я создал простую программу «Камень, ножницы, бумага». По сути, каждый раз, когда программа запускается, программа принимает пользовательский ввод — присваивает его переменной, присваивает случайное число другой переменной и сравнивает два ввода, используя несколько операторов if, чтобы определить результат. В этом и заключается моя проблема.

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

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

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

КРОМЕ того, я понимаю, что классы и методы, вероятно, бесполезны при создании такой простой игры в камень, ножницы, бумага, но я просто хотел попрактиковаться, а в чем нет.

Вот мой код:

вместе с веб-сайтом, на котором вы можете его запустить: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)Rock, (1)Paper, (2)Scissors было бы лучше использовать enum вместо. человеку будет намного проще читать.

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

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

я надеюсь, что это поможет вам 🙂