当前位置: 首页 > 知识库问答 >
问题:

在其他类中访问主类中的公共变量

谭安翔
2023-03-14

我正在尝试将我用Python制作的游戏移植到Java。在Python版本中,我将所有的方法和变量都放在一个“类”中,玩家是这样的字典:

游戏派克

...
new_player={"name":"","hp":0,...}
players=[]
//to add new player
players.append(new_player.copy())

然后分别添加玩家的数据值:

...
players[0]["name"]="bob"
players[0]["hp"]=50
...

在Java版本中,我有一个单独的类用于定义玩家对象,以及游戏的主方法。

例如(这是一个小版本):

游戏java(省略返回)

import java.utils.*;
public class game
{
    public static ArrayList<player> players = new ArrayList<player>();
    public static ArrayList<String> pdead = new ArrayList<String>();
    public static int turn = 0;
    public static void main(String[] args)
    {
        //do stuff
        players.add(new player(name));
        //do other stuff
    }
    public static void do_move(move)
    {
        //some move is selected
            players.get(turn).set_hp(10);
            //at this point compiler throws error: cannot find symbol
            //compiler does not recognize that a player should have
            //been added to the players variable
        //other stuff
    };
};

游戏者java(省略返回)

public class player
{
    //arbitrary list of private variables like hp and name
    public player(new_name)
    {
        name = new_name;
        //other variables defined
    };
    public void set_hp(int amount) //Adding hp
    {
        hp += amount;
    };
    public void set_hp(int amount,String type) //taking damage
    {
        mana += amount;
        //go through types, armor, etc.
            hp -= amount;
    };
    public void display stats() //displays all player's stats before choosing move
    {
        //display stats until...
        //later in some for loop
            System.out.println(players.get(index).get_hp());
            //here compiler throws error again: cannot find symbol
            //players arraylist is in main class's public variables
        //other stuff
    };
    //other stuff
};

假设,当要编译的两个类一起编译时,程序将能够运行,因为主变量是公共变量,并且在程序运行时定义了播放器变量。但是,编译器无法识别这一点并抛出错误,因为类(顺便说一句,在同一个目录中)不相互读取,并且在检查数组/arraylist时,对象没有在数组/arraylist中“定义”。

如何让编译器看到定义的变量?如果需要的话,我可以上传这两个类的当前工作版本和最终的python版本,但我喜欢保持游戏的源代码封闭。

编辑:根据sjkm的回复修复了ArrayList初始化

共有1个答案

楚嘉
2023-03-14

定义列表的常规类型:

改变

public static ArrayList players = new ArrayList<player>();
public static ArrayList pdead = new ArrayList<String>();

public static ArrayList<player> players = new ArrayList<player>();
public static ArrayList<String> pdead = new ArrayList<String>();

否则,您必须始终强制转换从列表中获取的对象。。。

 类似资料:
  • 问题内容: 我希望我说的是我的话。我有这样的课: 和其他这样的类: 这是从其他类(在该示例代码中)访问和更改其值的正确方法吗,是否有更好或更合适的解决方案?请注意,这是具有方法的类。 问题答案: 从另一个类访问私有变量的正确方法是使用getter和setter方法。否则,您应该将该变量公开。 那是: 但是,直接返回私有数据是一种不好的做法- 允许外部代码修改您的私有状态。通常,您应该返回私有数据的

  • 在Mainactive类中,我无法访问gamePanel变量或对象。在程序中稍后的其他类中,它运行良好。我遇到了以下错误: 类主要活动: 类游戏面板:

  • 问题内容: 我最近拾起Java并遇到了问题。我有几个具有不同类的文件,但是我无法弄清楚如何访问文件中声明了其他类之外的其他类的对象。例如: 我不确定如何从其他文件和类本身有效访问其他类的这些对象?我知道我可以使对象静态化,然后通过它们所在的类将它们作为变量进行访问,但这似乎有点违反直觉?我来自面向对象较少的编程背景,因此我仍在尝试了解Java的编程风格。 问题答案: 您可能只想要这样的东西: 希望

  • 由于某种原因,我有一个LinkedList类无法访问我的学生类方法。我不明白为什么会发生这种情况,因为我的linkedlist类是Student类型。我一直收到一个错误:找不到symbol symbol:method getName()位置:Student类型的变量数据,其中Student是一个类型变量:Student extends对象在类节点中声明。下面的方法来自我的链表类 getGpa是我的

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 问题内容: 我需要在其他班上变数。我怎样才能做到这一点? 所以我尝试在Textcl.class中使用,但是得到了。 问题答案: 您将得到空值,因为inString从未按Robert Kilar在注释中正确指出的那样进行初始化。 您可以通过使用类名来引用静态变量。 示例ClassName.variablename。就你而言 运行您的主类。当您运行inString时,将在该类的构造函数中对其进行初始化