Java 如何根据条件打印结果?
我的代码:Java 如何根据条件打印结果?,java,oop,Java,Oop,我的代码: 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
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,并且是一个结果,而不是两个结果
我该怎么做?有人能帮我吗?==比较对象引用,它检查两个引用是否指向同一个对象,而它们不是。这就是为什么您有两个输出 你应该使用.equals
我认为,如果:
这些System.out.println语句中只有一个将被执行:如果条件1和条件2都为true,则只打印1,因为条件1首先匹配。听着,我不想放下你的命令。我只是观察并给你一些建议 正如其他人所说,当您在对象上使用==时,它会比较引用 引用是在包含内存地址的堆栈中创建的块。当您调用新操作符时,Java实际上是在堆栈中为您保留一个新的地址内存 此引用指向堆中的实际对象,您可以在其中找到对象的所有组成部分 所以当你在做类似的事情时: v1==v2,您实际上在查看对象v1的内存地址是否与对象v2的内存地址实际上相同,这不是因为您已经调用了两次new操作符 以下是我的意思: 您可以通过以下方式证明:
System.out.println("V1 object : " + v1);
System.out.println("V2 object : " + v2);
你会发现地址是不同的
最后,如果您不想比较对象,这是可能的,但您需要告诉Java如何比较它们。这是通过@Override对象类中定义的equalsObject obj方法实现的
在您的示例中,它可能如下所示,您需要在PointClass中重写此方法:
@Override
public boolean equals(Pointclass p) {
if (this.x == p.x && this.y == p.y)
return true;
return false;
}
现在如果你使用v1.equalsv2,这将检查这些点是否位于相同的位置
希望Java对象实例化和引用现在更清楚。v1、v2和v3真的是边的长度吗?另外,您应该使用equals来比较PointClass实例,而不是==。首先,不要使用==来比较两个对象,您应该覆盖equals来检查相等性。然后只需将条件排序为第3、第1、第2,然后使用else i而不是if.-1,通过提供一致的格式并最好遵循Java约定,在您发布的代码中投入更多精力。我尝试过else if,但得到了相同的结果@Andy_Turnersion,因为您显示的代码不会给出您显示的输出,你显然做错了什么。我怎么用它@deviantxdes@MadJlzz不,我读了很多书,但是练习和reading@deviantxdes公共整数x=0;公共整数y=0;公共点类{}public PointClassint x,int y{this.x=x;this.y=y;}@AbdelrahmanAli,不在注释中显示代码。在你的帖子里展示它。当你在写的时候,正确地格式化整篇文章。@AbdelrahmanAli你当时读到的东西都不懂。如果你不想进步,这是最基本的事情,否则你将无法进步。@MadJIzz谢谢你,伙计:我昨天做了另一种方法,但谢谢你的工作,很好
System.out.println("V1 object : " + v1);
System.out.println("V2 object : " + v2);
@Override
public boolean equals(Pointclass p) {
if (this.x == p.x && this.y == p.y)
return true;
return false;
}