Java 如何从另一个过程访问记录?

Java 如何从另一个过程访问记录?,java,record,Java,Record,因此,我遇到了一个问题,我想在一个过程中创建一个记录,然后使用其他过程和函数更改该记录的属性 import java.util.Scanner; // Imports scanner utility import java.util.Random; import java.lang.Math; class alienPet { public void main (String[] param) { // We want to ca

因此,我遇到了一个问题,我想在一个过程中创建一个记录,然后使用其他过程和函数更改该记录的属性

  import java.util.Scanner; // Imports scanner utility
  import java.util.Random;
  import java.lang.Math;

  class alienPet
  {
      public void main (String[] param)
      {
          // We want to call all of the functions
          // and procedures to make an interactive
          // alien program for the user.

          welcomeMessage();
          alienCreation();

          System.exit(0);

      } // END main

        /* ***************************************
        *   Define a method to obtain the users input
        * and start the correct method.
        */

        public static String userInput (String message)
        {
          Scanner scan = new Scanner(System.in);
          String inp;
          print(message);
          inp = scan.nextLine();
              return inp;
        } // END userInput

        /* ***************************************
      * Define a method to print messages.
      */

      public static void print (String message)
      {
          System.out.println(message);
          return;
      } // END print

      /* ***************************************
      * Define a method to 
      */

      public static void welcomeMessage ()
      {
        print("Thank you for playing the pet alien game");
        print("In this game, you will have to look after your own alien.");
        print("There is multiple aspects to looking after your alien, such as:");
        print("Hunger, Behaviour and Thirst."); 
        print("");
        print("When prompted, you can use the following commands:");
        print("feed -> Replenishes alien to max hunger level");
        print("drink -> Replenished thirst level to max");
        print("");
          return;
      } // END 


      /* ***************************************
      * Define a method to 
      */

      public void alienCreation ()
      {
        Alien ufo = new Alien();
        ufo.name = userInput("What would you like to name your new alien?");
        ufo.hungerRate = ranNum(1, 6);
        print("On a scale of 1-6, your alien, " + ufo.name + ", has a hunger rate of " + ufo.hungerRate);
        alienBehaviour(ufo.hungerRate);
          return;
      } // END alienCreation

      public void alienBehaviour (int hunger) {
          if (hunger <= 2){
              print(ufo.name + " is very hungry, and is dangerously angry!!");
              String action = userInput("You should feed it as soon as possible. (by typing 'feed')");
              if (action.equals("feed")){
                  feedAlien();
              }else if (action.equals("drink")) {
                  alienDrink();
              }else{
                  print("That is a dangerous decision.");
              }
          }else if (hunger <= 4) {
            print(ufo.name + " is mildly hungry, but is in a calm state.");
              String action = userInput("Would you like to take any actions?");
              if (action.equals("feed")){
                  feedAlien();
              }else if (action.equals("drink")) {
                  alienDrink();
              }else{
                  print("Okay.");
              }
          }else if (hunger <= 6) {
            print(ufo.name + " is not hungry and is in a happy state.");
              String action = userInput("Would you like to take any actions?");
              if (action.equals("feed")){
                  feedAlien();
              }else if (action.equals("drink")) {
                  alienDrink();
              }else{
                  print("Okay.");
              }
          }
      }

      public void feedAlien() {
          ufo.hungerRate = 6;
          print(ufo.name + "'s hunger level replenished to max level 6.");
          print(ufo.name + " is now at a happy level.");
      }

      public void alienDrink() {
        ufo.thirst = 6;
        print(ufo.name + "'s thirst level replenished to max level 6.");
    }

      public static int ranNum(int min, int max){ // A function that generates a random integer wihin a given range.
        Random random = new Random();
        return random.ints(min,(max+1)).findFirst().getAsInt();
    } // END ranNum

  } // END class alienPet

  class Alien {
      String name;
      int age = 0;
      int hungerRate;
      int thirst = 6;
  }

现在我对java还不熟悉,所以我不确定是否必须将记录设置为全局或其他形式,因此非常感谢您的帮助。

在方法内部声明的变量称为
局部变量,并且可能在方法执行完后被处理掉

在任何函数之外声明的变量称为
实例
变量,可以在程序中的任何函数上访问(使用)

您正在查找一个实例
Alien
ufo
变量

class alienPet{ // It is recommended you use the java naming convention.
    Alien myAlien = new Alien();
    // alienPet a = new alienPet();
    // a.myAlien; // you could potentially do this to get an alien from an alienPet class
    void someVoid(){
        Alien otherAlien;
    }
    void errorVoid(){
        otherAlien.toString(); 
// causes an error, the otherAlien variable is never visible to errorVoid as it is a local variable
        myAlien.toString(); // OK
    }
}

在方法内部声明的变量称为
local
变量,并且可能在方法完成执行时处理

在任何函数之外声明的变量称为
实例
变量,可以在程序中的任何函数上访问(使用)

您正在查找一个实例
Alien
ufo
变量

class alienPet{ // It is recommended you use the java naming convention.
    Alien myAlien = new Alien();
    // alienPet a = new alienPet();
    // a.myAlien; // you could potentially do this to get an alien from an alienPet class
    void someVoid(){
        Alien otherAlien;
    }
    void errorVoid(){
        otherAlien.toString(); 
// causes an error, the otherAlien variable is never visible to errorVoid as it is a local variable
        myAlien.toString(); // OK
    }
}

变量的范围有问题。变量仅在中声明的花括号内有效

错误

public void alienCreation ()
{
    Alien ufo = new Alien();
    ufo.name = userInput("What would you like to name your new alien?");
    ufo.hungerRate = ranNum(1, 6);
    print("On a scale of 1-6, your alien, " + ufo.name + ", has a hunger rate of " + ufo.hungerRate);
    alienBehaviour(ufo.hungerRate);
    return;
} // END alienCreation and of the scope of your variable ufo

class alienPet
{
    Alien ufo;
    [...]
    public void alienCreation ()
    {
        ufo = new Alien();
        ufo.name = userInput("What would you like to name your new alien?");
        ufo.hungerRate = ranNum(1, 6);
        print("On a scale of 1-6, your alien, " + ufo.name + ", has a hunger rate of " + ufo.hungerRate);
        alienBehaviour(ufo.hungerRate);
        return;
    } // END alienCreation and your variable ufo will be initialized afterwards
}

变量的范围有问题。变量仅在中声明的花括号内有效

错误

public void alienCreation ()
{
    Alien ufo = new Alien();
    ufo.name = userInput("What would you like to name your new alien?");
    ufo.hungerRate = ranNum(1, 6);
    print("On a scale of 1-6, your alien, " + ufo.name + ", has a hunger rate of " + ufo.hungerRate);
    alienBehaviour(ufo.hungerRate);
    return;
} // END alienCreation and of the scope of your variable ufo

class alienPet
{
    Alien ufo;
    [...]
    public void alienCreation ()
    {
        ufo = new Alien();
        ufo.name = userInput("What would you like to name your new alien?");
        ufo.hungerRate = ranNum(1, 6);
        print("On a scale of 1-6, your alien, " + ufo.name + ", has a hunger rate of " + ufo.hungerRate);
        alienBehaviour(ufo.hungerRate);
        return;
    } // END alienCreation and your variable ufo will be initialized afterwards
}

但是您可以从大括号之外的其他类访问静态变量。它们不必是
静态的
,只需
公共的
。您将无法访问大括号外的
私有静态
变量。。。但这是一个完全不同的话题!要从另一个类访问非静态变量,如果我没记错的话,您必须拥有该类的对象。例如,在您的“正确”示例中,要获得外星人ufo,您必须调用类似
new alienPet().ufo
。哦,天哪,是的。但这与范围无关。这些是OOP的基础。但作用域也与OOP无关。它也存在于非OOP语言中。。。你可能会比帮助初学者更迷惑初学者……但是你可以从花括号之外的其他类访问静态变量。它们不必是
静态的
,只需
公共的
。您将无法访问大括号外的
私有静态
变量。。。但这是一个完全不同的话题!要从另一个类访问非静态变量,如果我没记错的话,您必须拥有该类的对象。例如,在您的“正确”示例中,要获得外星人ufo,您必须调用类似
new alienPet().ufo
。哦,天哪,是的。但这与范围无关。这些是OOP的基础。但作用域也与OOP无关。它也存在于非OOP语言中。。。你可能会比帮助初学者更迷惑他。。。