无法在编译错误的主方法中引用我的方法

我创建了以下石头、纸、剪刀游戏。我正在尝试创建一个名为“winner”的方法,它告诉用户谁赢得了比赛。我创建了一个变量“end”,它是方法“winner”的输出。当我执行 $System.out.println(winner(weapon, computerWeapon)) 时,它给了我一个编译错误。有人可以帮忙调试这个问题吗?我是java的新手。


错误:错误:无法从类型 Game 中对非静态方法 Winner(java.lang.String, java.lang.String) 进行静态引用


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;


  }


}


杨魅力
浏览 104回答 2
2回答

繁华开满天机

您试图end从静态方法中访问非静态变量winner(),这是不正确的。要修复它,您可以将其设置为静态,或使其成为winner()方法内的局部变量,因为您正在返回它。

aluckdog

首先;您不能从非静态方法中引用静态变量。要理解这一点,您需要了解静态和非静态之间的区别。静态变量是类变量,它们属于类,只有一个实例,只在第一个创建。每次创建类的对象时都会初始化非静态变量。在您的代码中,endparam 是非静态的。但是你是从你的静态方法调用这个参数的,它是winner(..). 你不能这样做。在您的静态方法中,您试图返回字符串。全局变量endparam 将是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;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java