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;
 }