我的代码:
public class Triangle
{
private PointClass v1 = new PointClass();
private PointClass v2 = new PointClass();
private PointClass v3 = new PointClass();
public Triangle (PointClass v1 , PointClass v2 , PointClass v3)
{
this.v1 = v1;
this.v2 = v2;
this.v3 = v3;
}
public void printtype()
{
if (v1 != v2 && v2 !=v3 && v1 !=v3)
{
System.out.println(" The Triangle is scalene");
}
if (v1 != v2 || v3 !=v2 )
{
System.out.println(" The Triangle is isosceles");
}
if (v1 == v2 && v2== v3 && v1 == v3)
{
System.out.println(" The Triangle is equilateral");
}
}
}
主要方法:
public static void main(String[] args)
{
PointClass v1 = new PointClass(1, 2);
PointClass v2 = new PointClass(1, 2);
PointClass v3 = new PointClass(1, 2);
Triangle tr = new Triangle(v1, v2, v3);
tr.printtype();
}
输出为:
三角形是斜角肌
三角形是等腰
我想打印条件的结果取决于PointClass的输入,例如V1,V2和V3,并且是一个结果而不是两个
我该怎么做?任何人都可以帮助我吗?
答案 0 :(得分:2)
我认为您正在寻找else if
:
if (condition1) {
System.out.println("1");
} else if (condition2) {
System.out.println("2");
} else {
System.out.println("other");
}
只会执行其中一个System.out.println
语句:如果condition1
和condition2
都为真,则只打印1
,因为condition1
匹配第一
答案 1 :(得分:0)
==比较对象引用,它检查两者是否指向同一个对象(它们不是)。这就是为什么你有2个输出。
您应该使用.equals
if (!v1.equals(v2) && !v2.equals(v3) && !v1.equals(v3))
{
...
}
else if(...)
{
...
}
// use this custom equals for your case
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PointClass)) {
return false;
}
PointClass temp = (PointClass) obj;
return this.x.equals(obj.x)
&& this.y.equals(obj.y);
}
答案 2 :(得分:0)
看,我不是想让你失望。我只是观察并给你一些建议。
与其他人一样,当您在==
上使用Objects
时,它会比较引用。
引用是在Stack
中创建的包含内存地址的块。当您调用new
运算符时,Java实际上为您保留了Stack
中的新地址内存。
此引用指向Object
中的实际Heap
,您可以在其中找到对象的所有内容。
所以当你做的事情如下:
v1 == v2
,您实际上在查看Object
v1的内存地址是否与Object
v2实际上是相同的地址,这不是因为您已拨打new
运营商两次
您可以使用以下方式证明:
System.out.println("V1 object : " + v1);
System.out.println("V2 object : " + v2);
你会看到地址不同。
最后,如果您不想比较对象,这是可能的,但您需要告诉Java如何比较它们。这是通过@Override
equals(Object obj)
类中定义的Object
方法完成的。
在您的示例中,它看起来像这样(您需要在PointClass中覆盖此方法):
@Override
public boolean equals(Pointclass p) {
if (this.x == p.x && this.y == p.y)
return true;
return false;
}
现在,如果你使用v1.equals(v2)
,这将检查这些点是否位于相同的位置。
希望现在关于Java对象实例化和引用更清楚。