0

我目前正在使用 java 开发 Josephus 解决方案。不幸的是,我只被允许使用数组(没有 arrayLists 也没有递归)

我在从最后一个位置开始(7 名玩家,从第 2 轮第 7 位开始)以及将循环计数器的增量放在哪里时遇到问题。

你们能帮帮我吗?

static String[] array;
static int amountPlayers;
static int roundCounter = 1;

public String createArray(int amountPlayers) {
    array = new String[amountPlayers];
    String start = "";

    for (int i = 0; i < array.length; i++) {
        array[i] = "Player_" + (i + 1) + " ";
        start += array[i];
    }
    return start;
}

public int remainingPlayers() {
    int tempPlayers = 0;

    for (int i = 0; i < array.length; i++) {
        if (array[i] != null) {
            tempPlayers++;
        }
    }

    return tempPlayers;
}

public int getStartPosition() {
    int tempPosition;

    tempPosition = remainingPlayers() % amountPlayers;

    return tempPosition;
}

public void deleteSecondPosition() {
    int startPosition = getStartPosition();
    int length = remainingPlayers();
    for (int i = startPosition; i < length; i++) {    
        array[i] = null;                              //array = {1,_,3,_,5,_,7}
        ++i;
    }
}

public int searchNextPosition(int i){
    for (int j = i+1; j < array.length; j++) {
        if (array[j] != null) {
            return j;
        }
    }
    return -99;
}

public String[] refillArray() {
    int nextPosition;

    for(int i = 0; i < array.length;i++) {
            if (array[i] == null) {
                nextPosition = searchNextPosition(i);
                array[i] = array[nextPosition];
                array[nextPosition] = null;
            }
        }
    roundCounter++;
    return array;
}

public void output(String[] array2) {
    String output = "";
    for (int i = 0; i < array2.length; i++) {
        System.out.print(array2[i] + " ");
    }
}

public static void main(String[] args) {
    Josephus a6 = new Josephus();
    java.util.Scanner scan = new java.util.Scanner(System.in);

    try {
        System.out.print("Amount Players: ");
        amountPlayers = scan.nextInt();
    } catch (InputMismatchException teste) {
        System.out.println("Invalid");
        System.exit(1);
    }
    if (amountPlayers < 1) {
        System.out.println("Invalid");
        System.exit(1);
    }

    System.out.println("\nStart:");
    System.out.print(a6.createArray(amountPlayers));

    do {
        System.out.println("\n\nAfter round: " + roundCounter);
        a6.deleteSecondPosition();
        array = a6.refillArray();
        a6.output(array);
    } while (array[1] != null);
}
4

0 回答 0