我目前正在使用 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);
}