Невозможно сослаться на мой метод в основном методе с ошибкой компиляции - PullRequest
0 голосов
/ 07 октября 2018

Я создал следующую игру «камень, ножницы, бумага».Я пытаюсь создать метод с именем «победитель», который сообщает пользователю, который выиграл игру.Я создал переменную «end», которая является выходом метода «winner».Когда я делаю $ System.out.println (Победитель (оружие, компьютерное оружие)), он выдает ошибку компиляции.Может кто-нибудь помочь отладить эту проблему?Я новичок в Java.

Ошибка: ошибка: невозможно сделать статическую ссылку на победителя нестатического метода (java.lang.String, java.lang.String) из типа Game

import java.util.Scanner;
public class Game {
  String end;
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    String computerWeapon;
    System.out.print("Human, choose your weapon: ");
    String weapon = input.next().toLowerCase();
    int randomNumber =  (int)(Math.random()*(3));

    if (randomNumber == 0)  {
       computerWeapon = "rock";
    }
    else if (randomNumber == 1)  {
       computerWeapon = "scissors";
    }
    else  {
       computerWeapon = "paper";
    }
    System.out.println("Computer chooses: " + computerWeapon);


   System.out.println(winner( weapon,  computerWeapon));



}

  public static String winner(String weapon, String computerWeapon){
    if (weapon.equals("rock")){
      if(computerWeapon.equals("rock")) {
        end= "Tie!";
         }
         else if (computerWeapon.equals("scissors")) {
           end =  "Human wins!";
         }
         else if (computerWeapon.equals("paper")) { 
           end= "Computer wins!";
         }
    }
    else if (weapon.equals("paper")){
      if(computerWeapon.equals("rock")) {
        end= "Human wins!";
         }
         else if (computerWeapon.equals("scissors")) {
           end= "Computer wins!";
         }
         else if (computerWeapon.equals("paper")) { 
          end= "Tie!" ;
         }
    }
      else if (weapon.equals("scissors")){
      if(computerWeapon.equals("rock")) {
        end= "Computer wins!";
         }
         else if (computerWeapon.equals("scissors")) {
           end= "Tie!";
         }
         else if (computerWeapon.equals("paper")) { 
           end= "Human wins!";
         }
    }
      return end;

  }

}

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Во-первых;

  • Нельзя сделать ссылку на статическую переменную из нестатического метода.Чтобы понять это, вам нужно понять разницу между статическими и нестатическими.
  • Статические переменные являются переменными класса, они принадлежат классу с единственным экземпляром, созданным только в первом.Нестатические переменные инициализируются каждый раз, когда вы создаете объект класса.

В вашем коде end param не является статичным.Но вы вызываете этот параметр из вашего статического метода, который является winner(..).Вы не можете сделать это.

В вашем статическом методе вы пытаетесь вернуть строку.Глобальная переменная end param будет внутренней переменной в методе winner.Поэтому измените этот код следующим образом:

public static String winner(String weapon, String computerWeapon) {
    String end = "";
    if (weapon.equals("rock")) {
        if (computerWeapon.equals("rock")) {
            end = "Tie!";
        } else if (computerWeapon.equals("scissors")) {
            end = "Human wins!";
        } else if (computerWeapon.equals("paper")) {
            end = "Computer wins!";
        }
    } else if (weapon.equals("paper")) {
        if (computerWeapon.equals("rock")) {
            end = "Human wins!";
        } else if (computerWeapon.equals("scissors")) {
            end = "Computer wins!";
        } else if (computerWeapon.equals("paper")) {
            end = "Tie!";
        }
    } else if (weapon.equals("scissors")) {
        if (computerWeapon.equals("rock")) {
            end = "Computer wins!";
        } else if (computerWeapon.equals("scissors")) {
            end = "Tie!";
        } else if (computerWeapon.equals("paper")) {
            end = "Human wins!";
        }
    }
    return end;

}
0 голосов
/ 07 октября 2018

Вы пытаетесь получить доступ к нестатической переменной end из статического метода winner(), что неверно.Чтобы исправить это, вы можете либо установить его как статическое, либо сделать его локальной переменной внутри метода winner(), поскольку вы его возвращаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...