简体   繁体   English

Java:使用 Static 方法在 Main 之外的方法中调用 Object

[英]Java: Calling Object in Method Outside of Main with Static Methods

Should be an easy fix but I was wondering how to use an object that is created in main.应该很容易解决,但我想知道如何使用在 main.js 中创建的 object。 I tried to say Human h;我试着说人类 h; outside of main (or any other methods) so I could call it in other methods but because I am using static methods I can't use h.在 main (或任何其他方法)之外,所以我可以在其他方法中调用它,但是因为我使用的是 static 方法,所以我不能使用 h. Right now with this code, java tells me that h cannot be found (in the human roll method.)现在使用此代码,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();
}
}
 }

If you need to see the Human class to provide context I can quickly respond and add it in but it's just instance variables, default constructors, overloaded constructors, accessor methods, and mutator methods.如果您需要查看 Human class 以提供上下文,我可以快速响应并添加它,但它只是实例变量、默认构造函数、重载构造函数、访问器方法和修改器方法。

You can pass Human as method parameter to startGame and humanRoll defined them as您可以将 Human 作为方法参数传递给 startGame 和 humanRoll 将它们定义为

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

Then, in main, invoke startGame(h) .然后,在 main 中调用startGame(h)

see if this works...看看这是否有效...

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();
    }
  }

}

If you want the Human h to be static (only one in your program), then you can define it as such:如果您希望 Human h 为 static(您的程序中只有一个),那么您可以这样定义它:

static Human h;

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

In Java, Variables declared inside a function can only be used inside the function.在 Java 中,在 function 内声明的变量只能在 function 内使用。 We say the scope of the variable is only within the function.我们说变量的 scope 只在 function 之内。

Fix: you can pass your variable h as an argument to your other functions.修复:您可以将变量 h 作为参数传递给其他函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM