如何打印结果取决于条件?

时间:2016-09-22 08:05:45

标签: java oop

  1. 我的代码:

        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");
       }
    
    
     }
    
    
    }
    
  2. 主要方法:

      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();
    }
    
  3. 输出为:

    三角形是斜角肌

    三角形是等腰

  4. 我想打印条件的结果取决于PointClass的输入,例如V1,V2和V3,并且是一个结果而不是两个

    我该怎么做?任何人都可以帮助我吗?

3 个答案:

答案 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语句:如果condition1condition2都为真,则只打印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运营商两次

以下是我的意思:Java Stack && Heap

您可以使用以下方式证明:

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对象实例化和引用更清楚。