【问题标题】:creating a method that randomly returns a fish from an arraylist创建一个从数组列表中随机返回一条鱼的方法
【发布时间】:2023-04-07 00:47:02
【问题描述】:

您好,我无法创建一个名为 catchAFish() 的方法,该方法从数组列表中随机返回一条鱼(我在其中创建了另一个添加到它的方法)。如果索引为空,则将其替换为 null。下面提供了我的尝试,这是我的池塘课程:

import java.util.ArrayList;

    public class Pond 
    {
     private int numFish;
     ArrayList<Fish> fishes = new ArrayList<Fish>();

     public int getFish() {
      return this.numFish;
     }

     public Pond(int numFish) {
      this.numFish = numFish;
     }

     public boolean isFull() {
      return numFish == fishes.size();
     }

     public String toString() {
      return("Pond with " + this.numFish + " Fish");
     }

     public void add(Fish fish) {

      if(fishes.size() < this.numFish) {
       fishes.add(fish);
      }
     }

     public void listFish() {

         // iterate for every fish in the fishes ArrayList
         for (Fish fish : fishes) {
             System.out.println(fish.toString());
         }
     }

    public void catchAFish()
    {
    int randomNumber = 1 + (int) (Math.random() * fishes.size() - 1);

    fishes.remove(randomNumber);

    for(int j = 0; j < fishes.size(); j++)
    {
    System.out.println(fishes.get(j));

    }
    }

    }

一切正常。当我将所有鱼添加到数组列表中时它可以工作,当我只想运行程序时它工作正常(随机索引的鱼被删除),但是当我使用以下测试器代码运行它时它不会。我不断收到错误。感谢您的帮助,谢谢!

public class PondTestProgram 
{
    public static void main(String args[]) 
    {
         //Create a pond with 10 fish
        Pond pond = new Pond(15);
        pond.add(new Fish(4, "Sunfish"));
        pond.add(new Fish(25, "Pike"));
        pond.add(new Fish(20, "Bass"));
        pond.add(new Fish(30, "Perch"));
        pond.add(new Fish(4, "Sunfish"));
        pond.add(new Fish(15, "Pike"));
        pond.add(new Fish(9, "Pike"));
        pond.add(new Fish(12, "Bass"));
        pond.add(new Fish(5, "Sunfish"));
        pond.add(new Fish(12, "Sunfish"));
        pond.listFish();
        System.out.println("");



       // Now catch 7 random fish
        System.out.println("Catching 7 random fish as follows ...");
       for (int i=0; i<7; i++) 
        System.out.println(pond.catchAFish());
        System.out.println();

        // Now show what is left in the pond
        pond.listFish();

        // Now try to catch 5 random fish ... but only 3 actually left
        System.out.println("Catching 5 random fish as follows ...");
        for (int i=0; i<5; i++) 
            System.out.println(pond.catchAFish());
        System.out.println();

        // Now show what is left in the pond
        pond.listFish();



    }
}

我在 for 循环中的 pool.catchAfish() 部分不断收到错误,我不知道为什么

【问题讨论】:

  • 悲痛今天有很多可疑的问题。是否有课程讲师建议人们在这里寻求家庭作业帮助?
  • 是的@PaulHicks 她说如果你被困在某个部分,你们会很棒

标签: java arrays object methods arraylist


【解决方案1】:

您不会从 catchAFish 中返回鱼,因此您无法打印它。 java中的数组是零索引的 - 所以你的随机代码也是错误的。

public Fish catchAFish()
    {
    if (fishes.size() == 0) {
        throw new Exception("No fish to be found here..");
    }

    int randomNumber = (int) (Math.random() * fishes.size());
    return fishes.remove(randomNumber);
    }

【讨论】:

  • 列表中没有[] 运算符。 remove() 已经返回要删除的值。
  • 感谢您的回复! @user3259789 但我一直收到错误消息:Fish f = fishes[randomNumber];它说:错误:需要数组,但找到了 java.util.ArrayList
  • 根据 Guillaume Poussel 的评论修复...这里主要是 c++ 人哈哈。
【解决方案2】:

您的catchAFish 方法返回void。你可能是想让它把从池塘里捞出来的鱼还回来。

尝试将签名更改为public Fish catchAFish()。然后存储您从列表中删除的鱼,以便您可以将其归还:

Fish caught = fishes.remove(randomNumber);
…
return caught;

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多