本文主要是介绍【J2SE】数组学习小实验-数三退一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
说明
- 对于JAVA中一维数组的应用可以用下面的一个算法-数三退一来进行学习,即给定一个上限数,然后从零开始数,每数三下,那么第三个数则退出该数群,则最后一个剩下的数排在原来数群的哪一位?
代码
- 代码实现如下:
/*
方法一:面向过程的实现:
*/public class Count3Quit {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);}}}
}
/* 方法二:面向对象的实现 */public class Count3Quit2 {public static void main(String[] args) {KidCircle kc = new KidCircle(500);int countNum = 0;Kid k = kc.first;while(kc.count > 1) {countNum ++;if(countNum == 3) {countNum = 0;kc.delete(k);}k = k.right;}System.out.println(kc.first.id);}
}class Kid {int id;Kid left;Kid right;
}class KidCircle {int count = 0;Kid first,last;//多少人的圈KidCircle(int n) {for(int i = 0; i < n; i++) {add();}}//添加小孩void add() {Kid k = new Kid();k.id = count;if(count <= 0) {first = k;last = k;k.left = k;k.right = k;} else {last.right = k;k.left = last;k.right = first;first.left = k;last = k;}count ++;}void delete(Kid k) {if(count <= 0) {return;}else if(count == 1) {first = last = null;}else {k.left.right = k.right;k.right.left = k.left;if(k == first) {first = k.right;}else if(k == last) {last = k.left;}}count --;}
}
总结
- 对于这个算法的理解就是实现封闭性数组(环状数组)的一个首尾连接的问题,理解起来有一些困难。但是自己写一遍之后就清楚多了。
这篇关于【J2SE】数组学习小实验-数三退一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!