我正在尝试使用arraylist实现一个名为parade的类,它将管理类小丑的示例。每个小丑都需要用所有对象数据字符串来标识其名称、int id和双倍大小。我和一个新小丑一起参加游行。只有列队头的小丑(即第一个)才能离开列队。此外,我还编写了一个名为isfront的方法,该方法将小丑作为参数,如果传递的小丑位于游行队伍的前面,则返回true,否则返回false。创建一个测试应用程序来演示如何构建一个由三个或四个小丑组成的游行队伍,并包含您自己的名字。然后,去掉一个或两个,再加上一个或两个。另外,通过将不同的小丑传递给isfront方法来测试isfront方法。
我有一个代码,但它不是返回真的isfront方法,我试图使用包含方法,我也试图使用类似的接口小丑,但它没有工作得很好。不知道该怎么办。
import java.util.ArrayList;
public class Main
{
public static void main(String[] args)
{
Parade circus = new Parade();
circus.addClown(new Clown("Bobby",9,12.0));
circus.addClown(new Clown("Clair", 2, 11.0));
circus.addClown(new Clown("Tony",6,10.0));
circus.addClown(new Clown("Sarah",3,5.0));
circus.display();
System.out.println(circus.isFront(new Clown("Bobby", 9, 12.0)));
}
}
import java.util.ArrayList;
public class Parade
{
private static ArrayList<Clown> parade;
private int top;
public Parade()
{
top=0;
parade= new ArrayList<Clown>();
System.out.println(parade);
}
public void addClown(Clown c)
{
parade.add(c);
top++;
}
public void removeClown() //(Clown c)
{
parade.remove(0);
top--;
}
public void display()
{
System.out.println(parade);
}
public void getData()
{
parade.get(0);
}
public void setData()
{
parade.set(1,new Clown("Claire",2,5.0));
System.out.println(parade);
}
public int getTop()
{
return top;
}
public boolean isFront(Clown c)
{
return !parade.isEmpty() && c.equals(parade.get(0));
}
//exceptions
}
public class Clown
{
private String name;
private int id;
private double size;
public Clown(String name, int id, double size)
{
this.name=name;
this.id=id;
this.size=size;
}
public String getName()
{
return name;
}
public int getId()
{
return id;
}
public double getSize()
{
return size;
}
public String toString()
{
return name.toString() + id + size;
}
public boolean equals(Object o) {
if (o instanceof Clown c) {
return this.getName().equals(c.getName()) && this.getId() == c.getId() && this.getSize() == c.getSize();
}
return false;
}
}
他们在我们的教科书中没有太多关于这些东西的信息,比如使用对象和数组列表,它跳过它,假设你已经知道了,哈哈。。
1条答案
按热度按时间ia2d9nvy1#
首先,默认情况下,java中的对象是通过引用进行比较的。所以,即使你创造了两个
Clown
具有完全相同属性的对象,java将它们视为不同的对象,因为这两个对象引用不相同,它们都引用不同的内存位置。您可以重写这个行为,并通过重写equals()
方法Object
班级:这将有助于
contains()
(它内部使用equals()
). 第二,你可以把你的小丑和第一个小丑比较一下,看看是不是前面的那个:这个
isFront()
方法将返回true
如果游行不是空的,小丑c
等于游行中的第一个小丑。get(0)
找回游行队伍中的第一个小丑。根据您的评论,如果您希望两个小丑只有在其所有属性相等时才相等,请将equals方法更改为:这个
equals()
方法是Object
类,它是所有java类的父类。它定义了如何比较两个对象。签字如下:当我们重写时,它的签名在派生类中必须是相同的,在我们的类中是相同的
Clown
. 其参数的类型为Object
不是Clown
. 任何类型都可以转换为Object
,如果我比较Clown
另一种类型,例如:它仍然有效。所以我们使用
instanceof
运算符检查另一个对象是否也是Clown
. 如果它不是Clown
,我们回来false
但如果是,我们将该对象转换/强制转换为Clown
,只有这样我们才能打电话getName()
以及其他吸气剂方法:java 14为此引入了一个快捷方式,而不是以下步骤:
我们可以简单地写下:
它为我们铸造并储存在
c
.最后,我还重写了
Object.hashCode()
因为当你超控的时候你必须这么做equals()
,原因如下。