【问题标题】:Count number of books in Arraylist计算 Arraylist 中的书籍数量
【发布时间】:2026-01-15 14:00:02
【问题描述】:

我是 Java 编程的新手,并且在学校学习它。

我们的任务是创建一个小型图书馆,其中包含以下类 Library、Book、Author 和 Copy。使用具有预定义代码的给定类 Biblio,并将书籍添加到 Class Copy 中的 arraylist 中的类书籍中。

附加了 UML 域,因此您可以了解类的流程 一切正常,生成的输出是正确的。

类库中只有一种方法不起作用,int 方法必须根据 Class Book(字符串)计算 Copy 的数量: 我必须通过 Class Copy 中的 Arraylist 并查找特定的书并返回副本的数量。 对不起,代码中的荷兰语。 我使用 for 循环尝试了多个步骤 现在我发现了一个类似的帖子使用 hashset,我尝试了下面的代码,但返回 0。(有 3 个副本)

package domein;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

import domein.Boek;
import domein.Exemplaar;

/**
 *
 * Klasse die verantwoordelijk is voor het beheer van boeken
 *
 */
public class Bibliotheek {
  private ArrayList < Exemplaar > boekenlijst = new ArrayList < Exemplaar > ();


  /**
   *
   * Print de naam van de Bibliiotheek.
   *
   */
  public Bibliotheek(String string) {
    System.out.println(string);

  }

  /**
   * Methode om een alle exmeplaren van de opgegeven boek toe te voegen aan de
   * lijst.
   *
   * @param b1
   * @param exemplaar
   */

  public void voegToe(Boek b1, int exemplaar) {
    for (int i = 0; i < exemplaar; i++) {
      Exemplaar e = new Exemplaar(b1, exemplaar);
      boekenlijst.add(e);

    }

  }

  /**
   * Methode om een boek toe te voegen aan de lijst.
   *
   * @param b2
   */
  public void voegToe(Boek b2) {

    Exemplaar f = new Exemplaar(b2, 1);

    boekenlijst.add(f);
  }

  /**
   * Hiermee worden alle boeken van de bibliotheek opgevraagd en getoond op het
   * scherm.
   *
   * @return
   */
  public ArrayList < String > toonCollectie() {
    ArrayList < String > titels = new ArrayList < String > ();
    for (Exemplaar boek: boekenlijst) {

      System.out.println("Exemplaar --> " + boek.getTitel() + " " + boek.getAuteur() + " in taal " + boek.getTaal());
    }
    return titels;
  }

  /**
   * Hiermee worden alle Engelse boeken van de bibliotheek opgevraagd en worden
   * de exemeplaren in het Engels getoond op het scherm.
   *
   * @param string
   * @return
   */
  public ArrayList < Exemplaar > toonCollectie(String string) {
    for (Exemplaar boek: boekenlijst) {
      if (boek.getTaal() == string)

        System.out.println("Exemplaar --> " + boek.getTitel() + " " + boek.getAuteur() + " in taal " + boek.getTaal());
    }
    return boekenlijst;

  }

  /**
   * Hiermee worden alle auteurs welke een prijs hebben opgevraagd in de
   * bibliotheek en degene met een prijs worden op het scherm getoond.
   *
   * @return
   */
  public boolean printAuteurs() {
    for (Exemplaar auteur: boekenlijst)
      if (auteur.getPrijs(true))
        System.out.println(auteur.getAuteur());
    return false;

  }

  /**
   * Een methode om door de boekenlijst te gaan en de totaal aantal exemplaren
   * op te vragen.
   *
   * @param b1
   * @return
   */

  public int telExemplaren(Boek b1) {
    Set < String > set = new HashSet < String > ();
    int count = 0;
    for (Exemplaar element: boekenlijst) {
      String names = element.getTitel();
      set.add(names);
    }

    for (String a: set) {
      for (Exemplaar element: boekenlijst) {
        String names = element.getTitel();
        if (a.equals(names)) {
          count++;
        }
      }

      count = 0;
    }

    return count;

  }
}

非常感谢任何帮助。我已经添加了完整的代码

【问题讨论】:

  • 荷兰人的名字有点难以分辨,但如果你说的是telExemplaren(),我相信你根本没有使用方法的参数(Boek b1) .因此,无论您将通过哪本书,它都会始终如此。
  • 这有点令人困惑,因为您使用 for (Exemplaar element: boekenlijst) 来填充集合,然后检查相同的值并再次检查它自己
  • 您在外部 for 循环中所做的最后一件事是将 count 设置回 0。当它在循环退出之前设置为 0 时,它应该如何返回除 0 之外的任何内容?跨度>
  • gknicker 的方法有效。我看错了方向。这就是为什么我开始使用 Hashset 并且代码本身可以工作,但不能作为 getmethode。设置计数=0;外部循环在通过 Arraylist 时将 int 重置回来,因此它返回正确的数字而不是增加它返回的数字。

标签: java arraylist count hashmap hashset


【解决方案1】:

删除线

count = 0;

从函数接近尾声开始,应该可以帮助它做一些比现在更有用的事情。

【讨论】:

    【解决方案2】:

    您的telExemplaren() 方法完全忽略了Boek b1 参数。

    也许这就是你想要做的?

    public int telExemplaren(Boek b1) {
      int count = 0;
      for (Exemplaar element: boekenlijst) {
        if (b1.getTitel().equals(element.getTitel())) {
          count++;
        }
      }
      return count;
    }
    

    【讨论】:

    • 非常感谢,我正在尝试类似但使用过的包含但不起作用。我一直在寻找各种方法,我想我找错了方向。
    最近更新 更多