约瑟夫环问题,从第一个人开始数,数到二的人出列 java

2025-02-26 15:39:56
推荐回答(1个)
回答1:

你好像把自己绕进去了,边界值处理上有些问题,建议不在原来基础上改了。看看这份代码怎么样:

import java.util.LinkedList;
public class yuesefu {
    public static String scanPeople(String n, String c) {
        LinkedList pList = new LinkedList();
        try {
            int count = Integer.parseInt(c);
            int pNum = Integer.parseInt(n);
            for (int j = 0; j < pNum; j++) {
                pList.add(j + 1);
            }
            System.out.println(pList);
            System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            int circleCount = 0;
            while (pList.size() > 1) {
                for (int i = 0; i < pList.size(); i++) {
                    circleCount++;
                    if (circleCount == count) {
                        pList.remove(i);
                        circleCount = 0;
                        i--;
                        System.out.println(pList);
                    }
                }
            }
            System.out.println("try before return");
            return String.valueOf(pList.get(0));
        } catch (NumberFormatException e) {
            System.out.println("try before return");
            return "0";
        } finally {
            System.out.println("finally");
        }
    }
    public static void main(String[] args) {
        System.out.println(yuesefu.scanPeople("5", "2"));//5个人,数2踢出
    }
}

输出结果:

[1, 2, 3, 4, 5]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1, 3, 4, 5]
[1, 3, 5]
[3, 5]
[3]
try before return
finally
3