返回Arraylist项目,而不是布尔值



在以下代码中,我定义了一种称为 loadItems的方法,它假定在文本文件的每行中创建一个类型Item的数组列表。

  • 项目对象由包含名称的字符串和带有数字的int变量形成。
  • 文本文件的每一行都包含一个名称,要存储在新项目中,其次是=,然后在此之前,需要存储在新项目中的数字。总结,每行看起来像: String=int

问题是,我没有返回新项目并将其存储在loadItems数组列表中,而是因为它应该返回布尔值而遇到了一个错误。i映像这是因为新项目在a时内创建的,该功能检查了文本文件中的新行。

    ArrayList<Item> loadItems() throws FileNotFoundException {
        File phaseOneFile = new File("Phase-1.txt");
        Scanner readPhaseOneFile = new Scanner(phaseOneFile);
        while (readPhaseOneFile.hasNextLine()){
            String actualLine = readPhaseOneFile.nextLine();
            String[] actualLineToItem = actualLine.split("=");
            Item newItem = new Item();
            newItem.itemName=actualLineToItem[0];
            newItem.itemWeight= Integer.parseInt(actualLineToItem[1]);
            return loadItems().add(newItem);
        } 
    }

几件事。

  • 您返回得太早
  • 您返回错误的东西
  • 您没有出于明显的原因使用递归

首先,您应该仅返回 您已经构建了列表,因此请删除return

第二,循环结束后返回列表

第三,在实际的ArrayList中积聚东西,然后返回而不是递归。

第四,无需返回混凝土类型,只需返回List<Item>

List<Item> loadItems() throws FileNotFoundException {
    File phaseOneFile = new File("Phase-1.txt");
    Scanner readPhaseOneFile = new Scanner(phaseOneFile);
    List<Item> items = new ArrayList<Item>();
    while (readPhaseOneFile.hasNextLine()){
        String actualLine = readPhaseOneFile.nextLine();
        String[] actualLineToItem = actualLine.split("=");
        Item newItem = new Item();
        newItem.itemName=actualLineToItem[0];
        newItem.itemWeight= Integer.parseInt(actualLineToItem[1]);
        items.add(newItem);
    } 
    return items;
}

您正在返回loadItems().add(newItem);。从Collection#add()的Javadocs(ArrayList实施(:

如果该集合因呼叫而更改

,则返回true

https://docs.oracle.com/javase/8/docs/api/java/java/util/collection.html#add-e--e-

显然true是类型boolean。但是,在您的方法签名(ArrayList<Item> loadItems() throws FileNotFoundException(中,您声明您的方法返回ArrayList<Item>

要解决此问题,请在方法开始时创建一个新列表,请在使用list.add()while循环中附加到它,然后在方法末尾加入return list;

因为您的方法返回arraylist,您需要更改代码。现在,在第一个介绍中,您将从list.add((方法返回布尔值。这是不对的。在段循环中,您应该在列表中和外部添加一个项目应该返回阵列列表。将您的代码修改为:

 ArrayList<Item> loadItems() throws FileNotFoundException {
        ArrayList<Item> itemList = new ArrayList<>();
        File phaseOneFile = new File("Phase-1.txt");
        Scanner readPhaseOneFile = new Scanner(phaseOneFile);
        while (readPhaseOneFile.hasNextLine()){
            String actualLine = readPhaseOneFile.nextLine();
            String[] actualLineToItem = actualLine.split("=");
            Item newItem = new Item();
            newItem.itemName=actualLineToItem[0];
            newItem.itemWeight= Integer.parseInt(actualLineToItem[1]);
            itemList.add(newItem);
        } 
         return itemList;
    }

最新更新