【问题标题】:Looping through ArrayList to get an item number遍历 ArrayList 以获取项目编号
【发布时间】:2016-01-21 15:12:31
【问题描述】:

错误没有返回所需的语句,所以我需要 thiung 输出一个能够复制数组列表的正整数,非常感谢 thatnks

@Override
public String getDescription(int itemNumber)    {
    if(isKnownItemNumber(itemNumber) == true)   {
        for (recordItem i : itemList)    {
            if(i.getItemNumber() == itemNumber)    {
                return description;
            }
        }
    }
    return "does not exist";
}

   @Override
public void setDescription(String description) {
    this.description = description;
} 

这里是填充数组列表的主要方法:

package Purchase;
import java.util.*;

import javax.swing.SwingUtilities;


public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable()   {


        public void run() {
            gui.PosGUI.makeAndShowGUI();


            Items.newItems.recordItem(01,"banana",1.00,1);
            , "Mayonnaise", 2.00, 0);



        }

    });

}
}

【问题讨论】:

  • 为什么getItemNumber函数需要参数??它应该返回项目的 itemNumber,您将一个参数传递给函数并返回相同的参数..\
  • 什么是recordItem??
  • Anoops 第一条评论标记了您的错误。不带参数试试或者返回 this.itemNumber;尽管查看您的代码,但您的 Itemlist 中应该只有香蕉。顺便说一句,最好将isItemNumber(...)==false 更改为!isItemNumber(...)。效果相同,但看起来更好。
  • @AnoopLL 好吧,我做了这些更改(上面编辑过),但现在它只返回“不存在”。
  • 这是因为你只记录到你的静态项目:-)。所以只会保存最新的记录(以及列表中的许多新项目(空))。

标签: java loops arraylist get


【解决方案1】:

getter 方法的通常约定是不带参数,并返回请求的字段。

您的getItemNumber 方法接受一个参数,并将其作为结果返回,这没有任何意义。

public int getItemNumber(int itemNumber) {
    return itemNumber;
}

用一个普通的getter替换这个方法:

public int getItemNumber() {
        return itemNumber;
    }

你的isKnownItemNumber 方法变成了:

public boolean isKnownItemNumber(int itemNumber)    {

    //assert itemNumber >= 0 : "Item Number must be greater than or equal to 0";
    for (recordItem i : itemList)    {
        if (i.getItemNumber() == itemNumber)   {
            return true;
        }

    }
    return false;
}

【讨论】:

  • 好吧,我做了这些更改(上面编辑过),但现在它只返回“不存在”。
  • 这一定不是完整的错误信息,什么不存在?
  • 在 getDescription 中,如果它没有找到具有该编号的项目,它返回“不存在”
  • 哦,是的,对不起,我错过了那条消息。
【解决方案2】:

您的记录方法中可能还有另一个错误。您在此设置参数,而不是在您创建的新项目上。试试这个:

@Override
public void recordItem(int itemNumber, String description, double unitPrice, int sort)  {

   if ((isKnownItemNumber(itemNumber) == false) && (unitPrice > 0) && (sort == 0 || sort == 1)) {
       Items theItems = new Items();
       theItems.itemNumber = itemNumber;
       theItems.description = description;
       theItems.unitPrice = unitPrice;
       theItems.sort = sort;
       itemList.add(theItems);
   }

}

另一个错误:return i.description; 而不是 return description;

public String getDescription(int itemNumber)    {
    if(isKnownItemNumber(itemNumber) == true)   {
        for (recordItem i : itemList)    {
            if(i.getItemNumber() == itemNumber)    {
                return i.getDescription();
            }
        }
    }
    return "does not exist";
}

 public String getDescription(){
    return description;
}

【讨论】:

  • 由于某种原因输出 null
  • 是的,你应该返回 i.description。 :-)。否则,您将返回静态项目的描述,该描述为空。看看编辑。
  • 它不允许我做 i.description 但允许我做 i.getdescription 但仍然返回“不存在”
  • 添加一个普通的 getDescription()。现在它应该工作了。我忘了你可能无法访问你的字符串描述。
猜你喜欢
  • 2021-09-19
  • 2013-09-23
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多