有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

dice Java:使用静态方法在Main之外的方法中调用对象

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


共 (3) 个答案

  1. # 1 楼答案

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

    static Human h;
    
    public static void main(...) {
    ...
    
  2. # 2 楼答案

    可以将Human作为方法参数传递给StartName和humanRoll 定义为

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

    然后,主要调用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();
        }
      }
    
    }
    
  3. # 3 楼答案

    在Java中,函数中声明的变量只能在函数中使用。我们说变量的范围只在函数中

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