Java 调用一个非静态变量,以便其他类可以使用它(无法实例化)
我有个问题 我有一些类的对象,它们被称为“猫”“狗”等等 在这些类中,我为每个猫和狗对象分配了它们自己的整数能量级别(因此当它们“移动”通过二维数组时,它们会释放并获得能量)。 我是这样说的 因为“energylevel”是特定于每个对象的,所以我不能使它成为静态的。 如何让“dog类”看到非静态存储在“cat类”中的cat对象的能级 我不能实例化Java 调用一个非静态变量,以便其他类可以使用它(无法实例化),java,object,non-static,Java,Object,Non Static,我有个问题 我有一些类的对象,它们被称为“猫”“狗”等等 在这些类中,我为每个猫和狗对象分配了它们自己的整数能量级别(因此当它们“移动”通过二维数组时,它们会释放并获得能量)。 我是这样说的 因为“energylevel”是特定于每个对象的,所以我不能使它成为静态的。 如何让“dog类”看到非静态存储在“cat类”中的cat对象的能级 我不能实例化Cat c=new Cat()在dog类中,它已经在main方法中完成 这都是一个大型项目的一部分,如果我没有解释清楚,请原谅。您可以在Cat对象内添
Cat c=new Cat()
在dog类中,它已经在main方法中完成
这都是一个大型项目的一部分,如果我没有解释清楚,请原谅。您可以在Cat对象内添加一个静态方法,该方法将根据Cat的ID返回非静态变量。您需要在Cat对象内的静态映射中保留一个Cat列表
private static HashMap<String,Cat> cats = new HashMap<String,Cat>();
...
public static int getEnergy(String catId) {
Cat myCat = cats.get(catId);
return myCat.getEnergy();
}
public int getEnergy() {
return this.energy()
}
private static HashMap cats=new HashMap();
...
公共静态int getEnergy(字符串catId){
Cat myCat=cats.get(catId);
返回myCat.getEnergy();
}
公共能源{
归还这个。能量()
}
或者,根据要求,如果要按X,Y搜索:
private static ArrayList<Cat> cats = new ArrayList<Cat>();
private int energy = 100;
private int x = 0;
private int y = 0;
...
public static int getEnergy(int x, int y) {
//Energy of -1 being the error (not found) state.
int energy = -1;
for(Cat cat : cats) {
if(cat.getX() == x && cat.getY() == y) {
energy = cat.getEnergy();
}
}
return energy;
}
public int getEnergy() {
return this.energy()
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
private static ArrayList cats=new ArrayList();
私人国际能源=100;
私有整数x=0;
私有整数y=0;
...
公共静态整数能量(整数x,整数y){
//能量-1为错误(未找到)状态。
int能量=-1;
用于(猫:猫){
if(cat.getX()==x&&cat.getY()==y){
能量=cat.getEnergy();
}
}
返回能量;
}
公共能源{
归还这个。能量()
}
公共int getX(){
归还这个.x;
}
公共int getY(){
把这个还给我;
}
您希望狗
如何获得猫
?您可以创建一个助手,在主类中的不同对象之间传递数据。这样,您可以告诉dogA
catA正在做什么,也可以告诉dogA
dogB正在做什么。您只需要一个具有两个参数的方法,一个用于对象,另一个用于对象。然后,您可以向接受此信息并对其作出反应的Dog
和Cat
类添加一个方法。解决方案在每本教您面向对象编程或Java基础知识的书中都有。感谢GavinCattell,回答得很好,但是有没有办法使Cat的ID等于2d数组中的一个位置?两个对象可以出现在同一个位置上吗?嘿,再次感谢,但是我写了代码,在“return myCat.getEnergy();”中出现了一个错误,它仍然说不能从静态上下文访问非静态方法getEnergy(),并且“public static int getEnergy(int x,int y)”缺少一个返回语句。其中有一些输入错误,我已经清除了。请再看一看。对不起,伙计,我输出了能量级别,它说它们都是-猫的1,我检查了三次,以确保我没有做错什么