0

我正在尝试编写一个随机分组人群的程序。我遇到了迭代器的问题。这是代码:

@SuppressWarnings("deprecation")
public static void results(List<String> nameslist) {

    Scanner scan = new Scanner(System.in);
    int groups = 0;
    int count = nameslist.size();
    int done=0; 

    do{
        System.out.println("How many people do you want per group?");
        groups = scan.nextInt();
    } while(groups == 0);
    Iterator itr = nameslist.listIterator();
    int peopledone=0;
    while(peopledone<count){    
    int groupsdone = 0;
    while (groupsdone <= groups){
        groupsdone++;
        peopledone = 0;
        System.out.println("Group "+groupsdone+":");
        while (peopledone <= groups){
            try{
                Object obj = itr.next();
                System.out.println(obj);
                peopledone++;
            }catch (NoSuchElementException e){
                System.out.println("Error");
                Thread.currentThread().stop();
            }
        }
    }   
}

需要注意的几点:

  • nameslist 是我为测试目的而放在一起的字母 (af) 列表。通常,它们是班级中的人名。

  • 我试图让它只列出名称,直到它用完为止。

非常感谢!

4

2 回答 2

0

你得到 NoSuchElementException 因为由于嵌套循环,你做了太多的迭代。一旦到达列表的末尾,如果再次在迭代器上调用 next(),它就会抛出该异常。

除非我误解了您要执行的操作,否则这应该可以工作(可能有一种更优雅的方式,但至少可以解决您的问题):

public static void results(List<String> namesList)
    {
        Scanner scan = new Scanner(System.in);
        int namesPerGroup = 0;
        while (namesPerGroup == 0)
            namesPerGroup = scan.nextInt();

        int group = 0;
        int namesInGroup = 0;
        System.out.println("Group " + group + ": ");
        for (String name : namesList)
        {
            if (namesInGroup == namesPerGroup)
            {
                group++;
                namesInGroup = 0;
                System.out.println("Group " + group + ": ");
            }
            System.out.println(name);
            namesInGroup++;

        }
    }
于 2013-03-14T00:05:37.883 回答
0

您的迭代次数超过了列表元素的数量 - 确定您的循环将循环多少次。

您正在尝试做的事情可以而且应该分两行完成:

    Collections.shuffle(nameslist);
    List<String> result = nameslist.subList(0, Math.min(count, nameslist.size()));
于 2013-03-14T00:11:25.747 回答