简体   繁体   中英

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. I tried to say Human 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. Right now with this code, java tells me that h cannot be found (in the human roll method.)

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.

You can pass Human as method parameter to startGame and humanRoll defined them as

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

Then, in main, invoke 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:

static Human h;

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

In Java, Variables declared inside a function can only be used inside the function. We say the scope of the variable is only within the function.

Fix: you can pass your variable h as an argument to your other functions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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