自娱小程序--九宫格

    xiaoxiao2026-10-04  3

    package com.arvey.eventbank.crash; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class JiuGG { /* * 构建数据结构 * Map<1-5整数(亦做数值使用),两层嵌夽整型SET(两个数值,升序) key + sum(set) = 15 *  */ Map<Integer,Set<Set<Integer>>> nine = new HashMap<Integer,Set<Set<Integer>>>(); // a+b = sum, both a and b (beginNum ... 9) public Set<Integer> getSets(int sum,int beginNum){ boolean nullset = true; Set<Integer> res=null; //except sum-1 for(int x=beginNum;x<sum/2+1;x++){ if(x == 15-sum) continue; for(int m=9;m>sum/2;m--){ if(m == 15-sum) continue; if(x+m == sum){ if(nullset){ res = new HashSet<Integer>(); res.add(x); res.add(m); nullset = false; break; } }  } if(!nullset) break; } return res; } //firNum ( 1 ... 5) public Set<Set<Integer>> getAllSetsByNum(int firNum){ Set<Set<Integer>> res = new HashSet<Set<Integer>>(); int div=(15-firNum)/2; for(int i=1;i<=div;i++){ Set<Integer> aSet = getSets(15-firNum,i); if(aSet != null) res.add(aSet); } return res; } //get all groups, x+y+z = 15 public void initialNums(){ for(int i=1;i<=5;i++){ Set<Set<Integer>> aSet = getAllSetsByNum(i); if( aSet !=null ) nine.put(i, aSet); } } /*** * 九宫格特点(数字代表位置) * 1 2 3 * 4 5 6 * 7 8 9  *  5位置被使用四次,1+5+9 2+5+8 3+5+7 4+5+6 *  1,3,7,9位置被使用三次   1+2+3 1+4+7 1+5+9  *  2,4,6,8位置被使用两次, 1+2+3 和 2+5+8  */ boolean isPos1379(Set<Set<Integer>> specialkey,Integer value){ boolean res = false; for(Set<Integer> aset:specialkey){ if(aset.contains(Integer.valueOf( 10 - value))){ res = true; break; } } return res; } public void printJiuGG(){ /*确定5,1,2,3,4,7的位置上的数值,规则取Map里key最小的 * 位置5,只有5被使用四次,所以找出包涵Set最多的key就是5位置的元素 * 位置1,取key最小的,有3组数,不取有5的一组的两组,这五个数会放在,12347的位置 * 位置3,7, 在key = 1的嵌夽数据集中,找到另两相加等于10的数,一个放在3,另一个落在7 * 位置2,必须被引用两次的数据中,且不能在有5的一组数中 * 位置4, 另一组有两组数据且 */ Set<Integer> keys = nine.keySet();//放入进有序,所以取第一个有三组数的key值, int pos1 = -1; Set<Set<Integer>> aSet = null; for(Integer key:keys){ aSet = (Set<Set<Integer>>)nine.get(key); if( aSet.size() == 3 ){ pos1 =  key; break; } } Set<Set<Integer>> pos1Set = (Set<Set<Integer>>)nine.get(pos1); Set<Integer> pos123 = null; Set<Integer> pos147 = null; for(Set<Integer> as : pos1Set){ if(as.contains(Integer.valueOf(5))) continue; else if(pos123 == null) pos123 = as; else pos147 = as; } //pos123中确定 位置2 3 int pos2 = -1,pos3 = -1; for(Integer aInt:pos123){ if(isPos1379(pos1Set,aInt)){ pos3 = aInt; } else pos2 = aInt; } //pos147中确定 位置7 4 int pos4 = -1,pos7 = -1; for(Integer aInt:pos147){ if(isPos1379(pos1Set,aInt)){ pos7 = aInt; } else pos4 = aInt; } System.out.println("Print the Result: 1-2-3 : "+pos1+"-"+pos2+"-"+pos3); System.out.println("Print the Result: 4-5-6 : "+pos4+"-"+5+"-"+(10-pos4)); System.out.println("Print the Result: 7-8-9 : "+pos7+"-"+(10-pos2)+"-"+(10-pos1)); } public Map<Integer,Set<Set<Integer>>> getNine(){ return nine; } public static void main(String[] args) { // TODO Auto-generated method stub JiuGG jiuGG = new JiuGG(); jiuGG.initialNums(); Set<Integer> keys = jiuGG.getNine().keySet(); for(Integer key:keys){ System.out.println("Key :"+key); Set<Set<Integer>> sets = (Set<Set<Integer>>)jiuGG.getNine().get(key); for(Set<Integer> ele:sets){ System.out.println(ele); } } jiuGG.printJiuGG(); } } 相关资源:python入门教程(PDF版)
    最新回复(0)