求助~数3退1 循环数组实现运行出错,提示数组越界
public class Count3Quit3{
public static void main(String[] args){
int[] arr = new int[500];
for(int i=0;i<arr.length-1;i++){
arr[i] = i+1;
}
arr[arr.length-1] = 0;
int count = arr.length;
int countNum = 0;
int index = 0;
while(count>1){
countNum++;
if(countNum == 3){
countNum = 0;
arr[index-1] = arr[index];
count--;
}
index = arr[index];
}
//System.out.println(index);
}
}
你的 arr[arr.length-1] = 0; 说明499下标的为0啊
然后你后面又arr[index-1] 出现了arr[-1]所以就报错了
[解决办法]
因为前面有代码
/**
* 翻牌-丢牌游戏,将一叠牌拿在手里,把最上面的牌翻到最下面,每翻若干次就
* 丢掉一张最上面的牌,直到剩下最后一张牌。
*/
public class CountAndDelete {
public static final int ARRAY_SIZE = 500; // 初始牌数
public static final int MOVE_DISTANCE = 3; // 每次翻牌的数量
public static void main(String[] args) {
int finalElement = countAndDelete(ARRAY_SIZE, MOVE_DISTANCE);
System.out.println("Final element: " + finalElement);
}
private static int countAndDelete(int arraySize, int moveDistance) {
int[] arr = new int[arraySize];
fillArray(arr);
int bound = arraySize - 1; // 最后剩余元素的位置
int counter = 0; // 总是指向最上面的牌
while (bound > 0) {
counter = moveCounter(counter, moveDistance, bound);
deleteElement(arr, counter, bound);
bound--;
}
return arr[0];
}
// 删除当前位置的数组元素,将后面的元素往前移
private static void deleteElement(int[] arr, int position, int bound) {
System.out.println("Delete: " + arr[position]);
System.arraycopy(arr, position + 1, arr, position, bound - position);
}
// 往后数若干个位置
private static int moveCounter(int currentPosition, int move, int bound) {
return (currentPosition + move) % (bound + 1);
}
private static void fillArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
}
}
public class Count3Quit1 {
public static void main(String args[]){
boolean[] arr = new boolean[500];
for(int i=0; i<arr.length; i++){
arr[i] = true;
}
int leftcount = arr.length;
int countnum = 0;
int index = 0;
while(leftcount>1){
if(arr[index] == true){
countnum++;
if(countnum == 3){
countnum = 0;
arr[index] = false;
leftcount--;
}
}
index++;
if(index==arr.length){
index=0;
}
}
for(int i=0; i<arr.length; i++){
if(arr[i] == true){
System.out.println(i);
}
}
}
}