为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2021-11-03 14:14:51
我创建了以下石头、纸、剪刀游戏。我正在尝试创建一个名为“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;  }}
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-11-03
?
aluckdog

TA贡献1847条经验 获得超7个赞

首先;

  • 您不能从非静态方法中引用静态变量。要理解这一点,您需要了解静态和非静态之间的区别。

  • 静态变量是类变量,它们属于类,只有一个实例,只在第一个创建。每次创建类的对象时都会初始化非静态变量。

在您的代码中,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;


}


查看完整回答
反对 回复 2021-11-03
  • 2 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信