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

リスト要素よりも多くの回数を繰り返しています。ループがループする回数を確認してください。

あなたがやろうとしていることは、2行で行うことができ、また行うべきです。

    Collections.shuffle(nameslist);
    List<String> result = nameslist.subList(0, Math.min(count, nameslist.size()));
于 2013-03-14T00:11:25.747 に答える
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 に答える