Невозможно ссылаться на мой метод в основном методе с ошибкой компиляции

Я создал следующую игру рок, бумаги, ножниц. Я пытаюсь создать метод под названием «победитель», который сообщает пользователю, кто выигрывает игру. Я создал переменную «конец», которая является результатом метода «победитель». Когда я делаю $ System.out.println (победитель (оружие, computerWeapon)), он дает мне ошибку компиляции. Может кто-то, пожалуйста, помогите отладить эту проблему? Я новичок в 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 ответа


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


Во-первых;

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

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

В вашем статическом методе вы пытаетесь вернуть строку. Параметр global variable end будет внутренней переменной в методе 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;

}

Есть идеи?

10000