【J2SE】数组学习小实验-数三退一
2016-08-25 16:38
120 查看
说明
对于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学习笔记-数组
- j2se学习中的一些零碎知识点4之字符串,数组和异常(使用数组实现冒泡排序算法和选择排序以及二分法查
- J2SE学习笔记3 — Java基本语法(9)数组和枚举
- J2SE_数组学习笔记
- J2SE学习笔记之数组
- [Java]学习Java(3)数组、字符串
- c语言学习零碎整理(7):数组名是指针吗?
- php学习笔记:php中的数组
- 用实验快速学习sendmail
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- 学习J2SE过程中的30个基本概念[转]
- 学习java中的数组:打印n*n矩阵的螺旋方形和回字形
- php学习笔记:可变变量、字符串运算符和数组运算符
- J2SE学习笔记----(一)概述
- c#学习体会:使用 ref 和 out 传递数组(downmoon)
- Java数组学习心得,欢迎拍砖
- c++入门学习(内存与指针及数组)
- 数组学习(续一)
- c++学习笔记(数组)
- 把我的 C 作业贴出来 实验三 数组——2