【问题标题】:How do I do an if else statement that loops over an array of strings?如何执行循环遍历字符串数组的 if else 语句?
【发布时间】:2015-12-09 00:13:48
【问题描述】:

我基本上是在写一个虚拟动物园。我有一个动物类,其中包含一个名为 eats 的数组,其中包含一串食物。我还有其他课程,例如狮子和老虎,它们扩展了我的动物课程。在这些课程中,我已经指定了他们吃的食物,因为这对每只动物都是独一无二的。例如,狮子吃牛排和芹菜。我现在被要求在我的动物类中创建一个 canEat() 方法,如果该特定动物可以吃那种食物,该方法基本上返回 true。我该怎么做呢?

这是我的动物课

public abstract class Animal {
    String[] eats = new String[] {"steak", "celery", "fish", "fruit"};

    public boolean canEat() {

    }
}

这是我如何指定每种特定动物在其受人尊敬的班级中可以吃什么

public class Lion extends Animal {
     public Lion (String[] eats) {
          super(new String[] {"steak", "celery"});
     }
}

提前谢谢,我希望我解释清楚了

【问题讨论】:

  • public boolean canEat() { 需要通过某些东西才能进行检查,例如public boolean canEat(String food) {

标签: java arrays if-statement


【解决方案1】:

定义canEat方法如下:

public boolean canEat(String food) {
    return Arrays.asList(eats).contains(food);
}

这里是你如何使用它:

public static void main(String args[]) {
    Lion lion = new Lion(new String[] {"steak", "meat", "otherFood"});

    System.out.println("Can the lion eat steak ? " + lion.canEat("steak"));
    // System.out: Can the lion eat steak ? true

    System.out.println("Can the lion eat meat loaf ? " + lion.canEat("meat loaf"));
    // System.out: Can the lion eat meat loaf ? false
}

【讨论】:

    【解决方案2】:

    有很多方法可以解决这个问题,使用 for 循环:

    public boolean canEat(String food) {
        for (int i = 0; i < eats.length; i++) {
            if (eats[i].equals(food))
                return true;
        }
        return false;
    }
    

    【讨论】:

      【解决方案3】:

      您需要稍微更改其中一个类,例如,您可以执行类似...

      public abstract class Animal {
          String[] eats;
      
          public Animal(String[] canEat) {
              eats = canEat;
          }
      
          public boolean canEat(String food) {
              boolean canEat = false;
              for (String eatiable :eats) {
                  if (eatiable.equals(food)) {
                      canEat = true;
                      break;
                  }
              }
              return canEat;
          }
      }
      

      同样,你可以让canEatabstract 让子类处理它。

      这是一个区分大小写的比较,如果你需要一个不区分大小写的比较,你可以改用eatiable.equalsIgnoresCase(food)

      【讨论】:

        【解决方案4】:

        所以完整的答案可以是

        public abstract class Animal {
            private String[] eats;
        
        public Animal(String[] eats) {
            this.eats = eats;
        }
        
        public boolean canEat(String food) {
            return Arrays.asList(eats).contains(food);
        }
        

        }

        public class Lion extends Animal {
             public Lion (String[] eats) {
                  super(eats);
             }
        }
        

        【讨论】:

          【解决方案5】:

          您可以将数组转换为 List&lt;String&gt; 的字符串列表,然后检查是否列出 contains 食物(作为参数传递给 canEat)。修改你的 canEat 如下

          public boolean canEat(String food) {
              List<String> eatsList = Arrays.asList(eats); 
              //if(eatsList.contains(food)) { 
              //   return true; 
              //} else {
              //  return false; 
              //}
          
              //as pointed out in comments would do exactly as above four lines of code
              return eatsList.contains(food); 
          }
          

          然后,当您创建对象时,您调用canEat() 并将食物作为参数传递给它。

          lion.canEat("fish"); 
          

          【讨论】:

          • 你不觉得有点多余吗? :)
          • 我知道,但是我不确定他是否可以使用 List。这就是为什么我向他展示了如何将数组转换为列表。
          • 不是关于列表部分,而是关于返回:D 再看一遍:p
          • @Raf 不,他们的意思是你可以这样做 return eatsList.contains(food) if-else 声明是多余的
          • 现在我明白你在说什么了。我正在慢慢到达那里。不过感谢您的指出。
          猜你喜欢
          • 2017-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-23
          • 2015-10-28
          • 1970-01-01
          相关资源
          最近更新 更多