【问题标题】:How to display methods from a random element in Arraylist?如何显示 Arraylist 中随机元素的方法?
【发布时间】:2020-07-27 14:58:23
【问题描述】:

我知道如何从ArrayList 获取随机元素,但我不知道如何也只显示 1 个元素的方法。例如,我有两个子类,其中包含一些非常基本的方法(它们基本上只是打印一些东西),ArrayList 在超类中。

这是我的代码,其中 Cat 和 Dog 是子类。现在代码打印其中一个,但显示两个类的方法。例如,如果程序选择 Dog,那么我只想显示 Dog 的 noise()furr() 的结果。我怎么能这样做?

ArrayList<Animal> an = new ArrayList<>();
        an.add(new Cat());
        an.add(new Dog());

       for (Animal a : an) { 
        a.noise();
        a.furr();
    }
   
    int randomIndex = (int) (Math.random() * an.size());
    System.out.println( "The animal: " +  an.get( randomIndex ));

【问题讨论】:

  • 这样做你打破了 oop 的基础之一:多态性。当您将元素放入列表时,您应该将所有项目视为动物。你的动物类或接口应该足够丰富以便有用,以便可以使用 Animal 方法调用它们。例如,Animal.noise() 将在 Cat 和 Dog 中被覆盖以发出不同的声音。也许 Animal.skin() 会被狗、猫和鹦鹉覆盖。

标签: java arraylist random


【解决方案1】:

您正在遍历所有动物并调用 Animal#noise 和 Animal#furr。您想要做的是在您选择的索引处获取动物并在该实例上调用这些方法。

还值得一提的是,允许类拥有多个职责是非常规的。当Animal 超类维护ListAnimal 引用时,您就打破了这个约定。相反,请使用service locator pattern 之类的模式来避免这种情况。

int randomIndex = (int) (Math.random() * an.size());

Animal animal = an.get(randomIndex);

animal.noise();
animal.furr();

【讨论】:

    【解决方案2】:

    您可以在选择随机元素后为其创建一个方法,然后将其传递给一个方法然后打印它。我帮你找。

    public int getRandomElement(List<Integer> list) 
    { 
        Random rand = new Random(); 
        return list.get(rand.nextInt(list.size())); 
    }
    

    【讨论】:

      猜你喜欢
      • 2018-07-19
      • 2022-12-31
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 2021-11-29
      • 2021-12-20
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多