Java 如何格式化数组以容纳对象?

Java 如何格式化数组以容纳对象?,java,arrays,object,Java,Arrays,Object,我是java新手,对于如何格式化数组以容纳对象,特别是使用多种数据类型,我感到非常困惑。我试图制作一个名为myMonsters的数组,它实际上包含一堆其他怪物,它们是一个字符串和一个整数。1,我真的不明白如何将对象放入数组。2,我不明白为什么数组在一个类名下而不是在另一个类名下。 我的意思是--> 这将创建容纳怪物对象的阵列。我不明白我为什么要在怪物下创建阵列。在怪物类下创建它不是更有意义吗?怪物类是存放怪物对象的地方 private int weight; private int he

我是java新手,对于如何格式化数组以容纳对象,特别是使用多种数据类型,我感到非常困惑。我试图制作一个名为myMonsters的数组,它实际上包含一堆其他怪物,它们是一个字符串和一个整数。1,我真的不明白如何将对象放入数组。2,我不明白为什么数组在一个类名下而不是在另一个类名下。 我的意思是-->

这将创建容纳怪物对象的阵列。我不明白我为什么要在怪物下创建阵列。在怪物类下创建它不是更有意义吗?怪物类是存放怪物对象的地方

private int weight;
    private int height;
    private int age;
    public Monster( int a, int h, int w )
    {
        age = a;
        height = h;
        weight = w;
    }
当然,这会创建对象。
我可以告诉你这些问题的格式有多糟糕,但你还能帮我吗?

类是一个模板,就像制作饼干的模板一样。类没有内容,就像切饼干的人没有饼干面团一样

饼干切割机的存在只是为了制作美味的饼干。类的存在只是为了生成有用的对象(又称实例)。对象里面有内容,就像饼干里面有面团一样

Monster
是一个制作各种怪物对象的类,cookiecuter

在Java16及更高版本中,我们可以更简单地将类定义为一个类。编译器隐式地创建构造函数、getter、
equals
&
hashCode
toString

package work.basil.example.animalkingdom.cookies;
公共记录怪物(字符串名称,整数权重)
{
}
作为常规课程,这将是:

package work.basil.example.animalkingdom.cookies;
导入java.util.Objects;
公开期末班怪物
{
私有最终字符串名;
私人最终整数权重;
公共怪物(字符串名称,整数权重)
{
this.name=名称;
重量=重量;
}
公共字符串名称(){return name;}
公共整数权重(){返回权重;}
@凌驾
公共布尔等于(对象obj)
{
如果(obj==this)返回true;
如果(obj==null | | obj.getClass()!=this.getClass())返回false;
var,即=(怪物)obj;
返回Objects.equals(this.name,that.name)&&
this.weight==that.weight;
}
@凌驾
公共整数哈希代码()
{
返回Objects.hash(名称、权重);
}
@凌驾
公共字符串toString()
{
返回“怪物”+
“name=“+name+”,”+
“重量=”+重量+”];
}
}
让我们用饼干切割器切一些饼干吧。我们想代表3个怪物,每个都有不同的名字和重量

Monster x=新怪物(“爱丽丝”,42岁);
怪物y=新怪物(“鲍勃”,77);
怪物z=新怪物(“卡罗尔”,58岁);
在那里,我们有三个独立的对象,每个对象都是从同一个
Monster
类中切割出来的。我们目前正在分别处理这3个怪物,每个怪物被分配到不同的变量

如果我们想以特定的顺序一起追踪这些怪物,我们不需要你的
怪物类。只需使用数组

假设我们想让它们按重量组织在一起

Monster[]monstersByWeight=新怪物[3];
怪物重量[0]=x;
怪物体重[1]=z;
怪物体重[2]=y;
Monster[]
表示我们希望名为
monstersByWeight
的变量包含一个数组,该数组包含
Monster
对象。新怪物[3]
创建了这样一个阵列,一个有三个空槽的阵列。
=
将包含三个空插槽的数组放入名为
monstersByWeight
的变量中,以便稍后使用

将该阵列转储到控制台以进行检查

String输出=Arrays.toString(monstersByWeight);
System.out.println(“output=“+output”);
输出=[Monster[name=Alice,weight=42],Monster[name=Carol,weight=58],Monster[name=Bob,weight=77]]

你说:

…保存对象,特别是具有多个数据类型的对象

这里只涉及一种数据类型:
Monster
。我们只有
Monster
对象可跟踪。因此名为
monstersByWeight
的数组的数据类型是
Monster

如果我们想添加另一个
怪物
对象:

Monster david = new Monster( "David" , 63 ) ;
…对于我们的阵列,我们需要打开一个插槽。使用数组,这是一个乏味的编程。我们可能会创建另一个阵列,将元素从旧阵列移动到新阵列,同时跳过我们希望为新的
怪物打开的插槽。写那些代码并不有趣

幸运的是,该代码已经编写完成。我们可以使用类
ArrayList
。此类实现了
列表
接口
ArrayList
可以为我们完成所有的元素插入工作

ListmonstersByWeight=newarraylist();
ListmonstersByWeight
表示我们需要一个包含
Monster
对象的列表。
new ArrayList()
实例化了这样一个默认大小的列表

接下来,我们添加
怪物
对象

monstersByWeight.add(x);
怪物重量。添加(z);
怪物重量。添加(y);
转储到控制台

System.out.println(怪物重量);
[怪物[姓名=爱丽丝,体重=42],怪物[姓名=卡罗尔,体重=58],怪物[姓名=鲍勃,体重=77]]

稍后,我们可以插入新的
Monster
对象
David
,该对象被分配给名为
David
的变量。体重63,这只新怪物在名为Bob
的怪物之前,但在名为Carol
的怪物之后。与数组一样,
列表
接口使用令人讨厌的基于零的计数,而不是顺序计数。要指定第三个元素,我们说
2
(如我所说,这很烦人)

monstersByWeight.add(2,david);
达姆
Monster david = new Monster( "David" , 63 ) ;