从链表数组中提取链表

时间:2011-05-06 11:18:18

标签: java list linked-list

我正在尝试从一个链表列表中提取一个链表,并且卡住了。在提取该链表后,我需要将每个链表中每个篮子中的水果数量相加。例如,Basket 0返回174,Basket 1返回147,等等。

我已经尝试使用迭代器和listIterator(以及它)来提取水果的数量,但我没有得到任何结果。有谁可以提供帮助?一些指针/提示,所以我可以再次开始编码。

public class ArrayLinkedList {

    final static int NUM_OF_ROWS = 32767;

    public static void main(String [] args) {

        List[] basket = new List [NUM_OF_ROWS];

        for (int i = 0; i < NUM_OF_ROWS; i++) {
            basket[i] = new LinkedList();
        }

        basket[0].add("1,APPLE,12");
        basket[1].add("2,APPLE,14");
        basket[1].add("3,APPLE,9");
        basket[2].add("4,APPLE,90");
        basket[2].add("5,APPLE,13");

        basket[0].add("1,ORANGE,45");
        basket[0].add("2,ORANGE,19");
        basket[1].add("3,ORANGE,67");
        basket[1].add("4,ORANGE,33");

        basket[0].add("1,BANANA,2");
        basket[0].add("2,BANANA,96");
        basket[1].add("3,BANANA,16");
        basket[1].add("4,BANANA,8");
        basket[2].add("5,BANANA,14");
        basket[2].add("6,BANANA,26");
        basket[3].add("7,BANANA,8");
        basket[3].add("8,BANANA,5");

        for (int i = 0; i < 5; i++) {
           System.out.println("Basket " + i + ": " + rows[i].toString());
        }

    }

}

4 个答案:

答案 0 :(得分:3)

我会假设这是家庭作业。

到目前为止,您所做的是创建一个列表数组,将列表添加到列表中。

您可以通过.size()方法获取列表中的项目数,但您可能希望添加放入字符串中的数字。

一种方法是:

  • 定义具有三个属性的Fruit类
  • 实例化Fruit对象以添加到篮子(列表)
  • 使用for循环来解决每个篮子
  • 在每个篮子列表上使用迭代器来计算果实

成功!

答案 1 :(得分:2)

这个解决方案无处可去。

我建议从一个Basket类和一个Fruit枚号开始(不保证这个编译 - 你可以解决它):

public enum Fruit { APPLE, BANANA, ORANGE; }

public class Basket
{
    private Fruit fruit;
    private int quantity;
    // you add the rest, including equals and hashCode overrides
}

创建List<Fruit>并从那里开始。

答案 2 :(得分:1)

你需要遍历basket数组,然后为每个条目迭代List,获取每个篮子条目(一个篮子条目例如1,APPLE,12。总结数量每个篮子入口的水果,你有你的总数。

另外,您可能希望使用String列表非通用列表。

//Iterate through the basket array
for (List<String> list : basket) {
  int totalNumberOfFruit = 0;

  //Iterate through the basket entries
  for (String s : list) {
    //s here will have the value for eg "1,APPLE,12"
    //you need to extract the number of fruit, perhaps
    //with s.split(",") and then add the number to
    //totalNumberOfFruit

  }
}

答案 3 :(得分:1)

您不应使用字符串来存储多个信息。这会强制您在每次想要获取部分信息时解析字符串。我不知道"1,APPLE,12"代表什么,但你应该使用一个对象而不是这个字符串:

public class Item {
    private int something;
    private String fruitName;
    private int numberOfFruits;

    public Item(int something, String fruitName, int numberOfFruits) {
        this.something = something;
        this.fruitName = fruitName;
        this.numberOfFruits = numberOfFruits;
    }

    public int getSomething() {
        return this.something;
    }

    public String getFruitName() {
        return this.fruitName;
    }

    public int getNumberOfFruits() {
        return this.numberOfFruits;
    }
}

然后,你的篮子阵列可以像这样构建:

List<Item>[] basket = new List<Basket>[NUM_OF_ROWS];

for (int i = 0; i < NUM_OF_ROWS; i++) {
    basket[i] = new LinkedList<Item>();
}

basket[0].add(new Item(1, "APPLE", 12));
basket[1].add(new Item(2, "APPLE", 14));
// ...

然后,您可以迭代其中一个篮子并轻松计算水果总数:

int totalNumber = 0;
for (Item item : basket[0]) {
    totalNumber += item.getNumberOfFruits();
}