黑马程序员技术交流社区

标题: 面向对象的方式解决,1,2,3,4数字不重复,有条件的排序问题 [打印本页]

作者: leojr    时间: 2016-11-2 13:02
标题: 面向对象的方式解决,1,2,3,4数字不重复,有条件的排序问题
这是一个工具类,我起的名字叫MemoryBox功能是,记忆输入的数并判断是否数据重复,还可以添加数据的约数条件,用于进行输入判断。
[Java] 纯文本查看 复制代码
import java.util.ArrayList;

public class MemoryBox {
        private MemoryBox(){}
        private static ArrayList<Integer> list = new ArrayList<>();
        private static boolean judgeADJ = false;
        private static int n1,n2;
        public static boolean setNum(int num){
                for (int i = 0; i < list.size(); i++) {
                        if(num == list.get(i)){
                                return false;
                        }
                }
                list.add(num);
                if(judgeADJ){
                        if(isAdjacented()){
                                return false;
                        }
                }
                return true;
        }
        public static boolean setNum(int num,boolean condition){
                //给定条件为false则返回false
                if (!condition) return false;
                for (int i = 0; i < list.size(); i++) {
                        if(num == list.get(i)){
                                return false;
                        }
                }
                list.add(num);
                if(judgeADJ){
                        if(isAdjacented()){
                                return false;
                        }
                }
                return true;
        }
        public static void clearMemory(){
                list.clear();
        }
        public static void addNonadjacentedJudge(int num1,int num2){
                n1 = num1;
                n2 = num2;
                judgeADJ = true;
        }
        public static void removeNonadjacentedJudge(){
                judgeADJ = false;
        }
        //判断集合中两个数是否相邻
        private static boolean isAdjacented(){
                int index1 = findIndexOfNum(n1);
                int index2 = findIndexOfNum(n2);
                if (index1>=0&&index2>=0) {
                        if(Math.abs(index1-index2)==1){
                                return true;
                        }
                }
                return false;
        }
        //找出两个数在集合中的位置
        private static int findIndexOfNum(int num){
                for (int i = 0; i < list.size(); i++) {
                        if(num == list.get(i)){
                                return i;
                        }
                }
                //没找到
                return -1;
        }
}

(请放入eclipse中食用)
下面是类的演示事例,事例解决了1,2,3,4数字不重复的排序问题,并且添加了首位不为4还有3,4不相邻的约束条件。并打印输出:
[Java] 纯文本查看 复制代码
public class Q1234ForObj {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //添加两个数不相邻的约束条件
                MemoryBox.addNonadjacentedJudge(4, 3);
//                MemoryBox.removeNonadjacentedJudge();//约束条件置空
                for (int i = 1; i <= 4; i++) {
                        for (int j = 1; j <= 4; j++) {
                                for (int k = 1; k <= 4; k++) {
                                        for (int l = 1; l <= 4; l++) {
                                                        //setNum数据加入记忆盒子,如果加入的数与盒子中的数重复则返回false
                                                        if (MemoryBox.setNum(i)&&MemoryBox.setNum(j)&&MemoryBox.setNum(k)&&MemoryBox.setNum(l)) {
                                                                int num = i*1000+j*100+k*10+l;
                                                                System.out.println(num);
                                                        }
                                                        //清空记忆,准备下次循环
                                                        MemoryBox.clearMemory();
                                        }
                                }
                        }
                }
        }

}







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2