尝试比较对象不能使用 IF 语句 JAVA

我正在编写一种在 ArrayList 中查找对象的方法。如果我能找到对象,我会将它打印到屏幕上,否则我会打印一条错误消息,指出“找不到对象”。我遇到的问题是因为我的方法是对象“十二面体”,而不是布尔值,所以我不能使用 if 语句来比较对象是否存在于数组中。我还能怎么办?


这是我的主要方法中的代码。


    System.out.print("\tLabel: ");

    label = userInput.nextLine();


    if(myDList.findDodecahedron(label)) {


        System.out.print(myDList.findDodecahedron(label));

    }

    else {

        System.out.print("\t\"" + label + "\" not found");

    }

        System.out.print("\n\nEnter Code [R, P, S, A, D, F, E, or Q]: ");

    break;

这是我的方法。


public Dodecahedron findDodecahedron(String label1In) {

      String label = "";

      String color = "";

      double edge = 0;

      Dodecahedron result = new Dodecahedron(label, color, edge);

      int index = -1;

      for (Dodecahedron d : dList) {

         if (d.getLabel().equalsIgnoreCase(label1In)) { 

            index = dList.indexOf(d);

            break;

         }    

      }

      if (index >= 0) {

         dList.get(index);

         result = dList.get(index);

      }

      return result;

   }

这是我尝试编译时遇到的错误。


DodecahedronListAppMenu.java:99: error: incompatible types: Dodecahedron cannot be converted to boolean

               if(myDList.findDodecahedron(label)) {


慕后森
浏览 107回答 3
3回答

慕慕森

检查返回值是否为空。if (myDList.findDodecahedron(label) != null)findDodecahedron()如果没有找到任何东西,而不是新对象,则需要更新以返回 null。更改的初始值result将做到这一点:Dodecahedron result = null;另外,你可以摆脱index和result如果你只是立即返回形状,当你找到它。无需保存其索引,然后在循环结束后查找索引。public Dodecahedron findDodecahedron(String label1In) {   for (Dodecahedron d : dList) {      if (d.getLabel().equalsIgnoreCase(label1In)) {          return d;      }       }   return null;}您还可以使用 Java 8 流进一步简化它:public Dodecahedron findDodecahedron(String label1In) {   return dList.stream()      .filter(d -> d.getLabel().equalsIgnoreCase(label1In))      .findAny()      .orElse(null);}

慕斯709654

您实际上是在此处实现空对象设计模式。您可以在findDodecahedron方法中明确说明这一点(旁注 - 为了优雅,我用 Java 8 样式的流替换了实现,但这并不是真正必需的):public static final Dodecahedron NULL_DODECAHEDRON = new Dodecahedron("", "", 0);public Dodecahedron findDodecahedron(String label1In) {      return dList.stream()                  .filter(d -> d.getLabel().equalsIgnoreCase(label1In))                  .findFirst()                  .orElse(NULL_DODECAHEDRON);}然后在 if 条件下使用它:if (!myDList.findDodecahedron(label).equals(NULL_DODECAHEDRON)) {    System.out.print(myDList.findDodecahedron(label));} else {    System.out.print("\t\"" + label + "\" not found");}

MM们

如果你的方法不返回一个布尔值而是一个特定的对象,你应该将它分配给一个变量来利用它。您不会实例化特定对象并将其返回以像布尔值一样对其进行测试。正因为如此,您必须重复方法调用以第二次检索结果,因为您需要在 std 输出中打印它。它是无奈和重复的代码/处理。这应该是这样的:Dodecahedron obj = myDList.findDodecahedron(label)if(obj != null) {    System.out.print(obj);}else {    System.out.print("\t\"" + label + "\" not found");}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java