【问题标题】:Java: Calling Object in Method Outside of Main with Static MethodsJava:使用静态方法在 Main 之外的方法中调用对象
【发布时间】:2021-03-30 06:17:17
【问题描述】:

应该是一个简单的修复,但我想知道如何使用在 main.js 中创建的对象。我试着说人类 h;在 main (或任何其他方法)之外,所以我可以在其他方法中调用它,但是因为我使用的是静态方法,所以我不能使用 h.现在有了这段代码,java 告诉我找不到 h(在人工滚动方法中)。

import java.util.Scanner;

class Main
 {
  // static Human h;
  public static void main(String[] args) 
  {
    Scanner scan = new Scanner(System.in);
    Computer c = new Computer();
    Human h = new Human();
    System.out.println("Let's play PIG");
    System.out.println("What is your name");
    String name = scan.nextLine();
    System.out.println("Hello" + " " + name + " " + "you can go first");
    startGame(h, name); 
}
public static void startGame(Human h, String name)
{
Scanner scan = new Scanner(System.in); 
System.out.println("Press r to start your roll");
String rresponse = scan.nextLine();
if(!rresponse.equalsIgnoreCase("R"))
{
System.out.println("Try again");
startGame(h, name);
}
if(rresponse.equalsIgnoreCase("R"))
{
System.out.println("You pressed r, lets roll");
humanRoll(h, name);
}
}
public static void humanRoll(Human h, String name)
{
if(h.getRollNumh()==1)
{
System.out.println(name + " " + "you got a " + h.getRollNumh());
System.out.println("You got a score of" + h.getHumanTurnScore() + "this turn");
System.out.println("Here is your current overall score" + h.getHumanOverallScore());
System.out.println("Your rolled a one, now its the Computers' turn");
switchHuman();
}
}
 }

如果您需要查看 Human 类以提供上下文,我可以快速响应并添加它,但它只是实例变量、默认构造函数、重载构造函数、访问器方法和 mutator 方法。

【问题讨论】:

  • 您需要添加一个参数并将该对象作为参数传递。例如,public static void humanRoll(Human h)。然后用humanRoll(h) 调用它。

标签: java dice


【解决方案1】:

如果您希望 Human h 是静态的(在您的程序中只有一个),那么您可以这样定义它:

static Human h;

public static void main(...) {
...

【讨论】:

  • 感谢您的帮助,找到了我的答案。
【解决方案2】:

您可以将 Human 作为方法参数传递给 startGame 和 humanRoll 将它们定义为

public static void startGame(Human human) 
public static void humanRoll(Human human)

然后,在 main 中调用 startGame(h)

看看这是否有效......

import java.util.Scanner;

class Main {

//tried to put Human h; up here but didn't work due to static methods 

  public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    Computer c = new Computer();
    Human h = new Human();
    System.out.println("Let's play PIG");
    System.out.println("What is your name");
    String name = scan.nextLine();
    System.out.println("Hello" + " " + name + " " + "you can go first");
    startGame(h);
  }

  public static void startGame(Human h) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Press r to start your roll");
    String rresponse = scan.nextLine();
    if (!rresponse.equalsIgnoreCase("R")) 
    {
      System.out.println("Try again");
      startGame(h);
    }
    if (rresponse.equalsIgnoreCase("R")) 
    {
      System.out.println("You pressed r, lets roll");
      humanRoll(h);
    }
  }

  public static void humanRoll(Human h) 
  {
//RollNumh is just the dice number that the player rolled 
    if (h.getRollNumh() == 1) 
    {
      System.out.println(name + " " + "you got a " + h.getRollNumh);
      System.out.println("You got a score of" + h.getHumanTurnScore() + "this turn");
      System.out.println("Here is your current overall score" + h.getOverallHumanOverallScore());
      System.out.println("Your rolled a one, now its the Computers' turn");
      switchHuman();
    }
  }

}

【讨论】:

  • 我已经占用了您足够多的时间,但如果您还有时间,我想知道是否可以对 HumanTurnScore 和 HumanOverallScore 使用 public static void humanRoll(Human h, int HumanTurnScore, int HumanOverallScore)?
  • 是的,但它仍然说找不到 RollNumh 和 HumanTurnScore。所以可能会问另一个关于从其他类调用访问器方法的问题。
  • 我看到 RollNumh 和 HumanTurnScore 是 Human 类的属性,如果是这样,您不必添加这两个参数。您可以在 h 上调用相应的 getter 方法来访问它们。
  • 好的,只是一些语法错误。最后,我非常感谢你的帮助。
【解决方案3】:

在Java中,在函数内部声明的变量只能在函数内部使用。我们说变量的作用域只在函数内部。

修复:您可以将变量 h 作为参数传递给其他函数。

【讨论】:

  • 感谢您的帮助,找到了我的答案。
猜你喜欢
  • 2012-06-25
  • 1970-01-01
  • 2014-08-25
  • 2014-03-05
  • 1970-01-01
  • 2018-10-22
  • 2012-12-03
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多