【问题标题】:How to find the number of times a specific element occurs in an Array list in Java如何查找特定元素在Java中的Array列表中出现的次数
【发布时间】:2014-12-31 17:33:30
【问题描述】:

我写了一个方法,目的是计算一种特定口味的薯片出现在 blueJ 的零食机中的次数

public int countPacks(String flavour){

        int n = 0;
        int nrFlavour = 0;
        while( n < packets.size()) {
            if( packets.get(n).equals(flavour)){
                nrFlavour++;
                n++;
            }
            else n++;
        }
        return nrFlavour;
}

我有一个 Arraylist 'packets',其中包含具有特定风味的 PackOfCrisps 对象。但是,当我添加了三包“盐”风味薯片并运行此方法时,输入“盐”作为风味,它只返回 0,就好像没有具有风味“盐”的 PackOfCrisps 对象一样。 对不起,如果这没有意义。我对 Java 很陌生,我已经尽力解释我的问题。 :)

【问题讨论】:

  • 请提供一个完整代码示例来说明您所询问的内容。我们应该能够复制和粘贴它,然后按原样运行它。 (好吧,请随意省略 import 语句,因为我们可以很容易地添加它们。)当其他人运行您提供的程序时,我们应该得到您所询问的行为。
  • packetsArrayList&lt;String&gt; 还是 ArrayList&lt;PackOfCrisps&gt;(或其他类型)?如果不是ArrayList&lt;String&gt;,您将不会让equals 返回true。 (我不知道您的确切代码,但您可以尝试将if( packets.get(n).equals(flavour)){ 更改为if( packets.get(n).flavour.equals(flavour)){。)
  • 显示如何定义和填充packets
  • 显示证明您的代码已损坏的代码很重要。添加你设置空包列表的位,添加“salt”三次,然后调用countPacks(“salt”),这样我们就可以看到你是对的。
  • 无关,但没有理由在条件中增加n;无论如何它都会增加。无论如何,如果不知道您实际拥有什么数据,以及flavour实际上是什么,就无法提供帮助。我建议加入一些调试语句。

标签: java arraylist while-loop bluej


【解决方案1】:

packets 列表包含PackOfCrisps 对象,该方法采用String 参数。所以packets.get(n).equals(flavour) 语句将PackOfCrisps 对象与String 进行比较,因此计数变量永远不会增加。

您需要将flavour 字符串与对象的特定字段进行比较,例如:

if(packets.get(n).getFlavour().equals(flavour)){

附带说明,您可以用简单的for 循环替换while 循环并删除n 的增量。

【讨论】:

    【解决方案2】:

    有一个内置的解决方案可以解决你的问题,你可以使用这个method

    您可以像这样重写您的 countPacks 方法:

    public int countPacks(String flavour){
        return Collections.frequency(packets, flavour);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 2020-02-25
      • 1970-01-01
      • 2014-12-17
      • 2020-07-22
      相关资源
      最近更新 更多