本帖最后由 李哲 于 2012-5-18 19:48 编辑
- import java.util.ArrayList;
- import java.util.HashSet;
- import java.util.Iterator;
- public class Cloth {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- HashSet hs=new HashSet();
- while(true){
- hs.add(new OneCloth("A",1 ));
- hs.add(new OneCloth("A",2 ));
- hs.add(new OneCloth("A",3 ));
- hs.add(new OneCloth("A",4 ));
- hs.add(new OneCloth("A",5 ));
-
- hs.add(new OneCloth("B",1 ));
- hs.add(new OneCloth("B",2 ));
- hs.add(new OneCloth("B",3 ));
- hs.add(new OneCloth("B",4 ));
- hs.add(new OneCloth("B",5 ));
- hs.add(new OneCloth("B",6 ));
-
- hs.add(new OneCloth("C",1 ));
- hs.add(new OneCloth("C",2 ));
- hs.add(new OneCloth("C",3 ));
- hs.add(new OneCloth("C",4 ));
- hs.add(new OneCloth("C",5 ));
- hs.add(new OneCloth("C",6 ));
- hs.add(new OneCloth("C",7 ));
-
- hs.add(new OneCloth("D",1 ));
- hs.add(new OneCloth("D",2 ));
- hs.add(new OneCloth("D",3 ));
- hs.add(new OneCloth("D",4 ));
- hs.add(new OneCloth("D",5 ));
- hs.add(new OneCloth("D",6 ));
- hs.add(new OneCloth("D",7 ));
- hs.add(new OneCloth("D",8 ));
-
- ArrayList A=new ArrayList();
-
- Iterator it=hs.iterator();
- int as=0;
- while (it.hasNext()&&as<5)
- {
- OneCloth oc=(OneCloth)it.next();
- if(oc.name!="A"){
- A.add(oc);
- it.remove();
- as++;
- }
-
- }
- if(A.size()!=5)
- continue ;
-
- // System.out.println("ok");
- ////////////////////////////////////
-
-
-
- ArrayList B=new ArrayList();
-
- int bs=0;
- while (it.hasNext()&&bs<6)
- {
- OneCloth oc=(OneCloth)it.next();
- if(oc.name!="B"){
- B.add(oc);
- it.remove();
- bs++;
- }
-
- }
- if(B.size()!=6)
- continue ;
-
- // System.out.println("ok");
- ////////////////////////////////////
-
- ArrayList C=new ArrayList();
-
- int cs=0;
- while (it.hasNext()&&cs<7)
- {
- OneCloth oc=(OneCloth)it.next();
- if(oc.name!="C"){
- C.add(oc);
- it.remove();
- cs++;
- }
-
- }
- if(C.size()!=7)
- continue ;
-
- // System.out.println("ok");
- ////////////////////////////////////
-
- ArrayList D=new ArrayList();
-
- int ds=0;
- while (it.hasNext()&&cs<8)
- {
- OneCloth oc=(OneCloth)it.next();
- if(oc.name!="D"){
- D.add(oc);
- it.remove();
- ds++;
- }
-
- }
- if(D.size()!=8)
- continue ;
-
- // System.out.println("ok");
- ////////////////////////////////////
- for(int i=0;i<5;i++){
- System.out.println("A--"+A.get(i).toString());}
- for(int i=0;i<6;i++){
- System.out.println("B--"+B.get(i).toString());}
- for(int i=0;i<7;i++){
- System.out.println("C--"+C.get(i).toString());}
- for(int i=0;i<8;i++){
- System.out.println("D--"+D.get(i).toString());}
- break;
-
- }
- }
- }
- class OneCloth{
-
- String name;
- int age;
-
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "OneCloth [name=" + name + ", age=" + age + "]";
- }
- public OneCloth(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
-
- }
- 最大的问题是hashSet的随机性很难保证。如果依靠一次一次的运行程代码,来一次一次的得到新的分配方法(因为hashSet的随机性)。这样做很不好,但是一次性得到所有非配方案,难度较大。
- 后来我设想将已有的方案(也就是将已经产生过的hashset存入数组)存入数组,下次再产生hashSet,如果和数组中的某个相同,就跳过。但是这个循环的停止条件我没有想到,而且可能会和代码内部的一些操作有冲突。我尝试,但是没有成功。
- 我想,仔细做一下,应该可以做到。
- 上面的代码只能通过一次次的运行代码,来得到不同的方案(依赖HashSet的随机性)。
- 在思路,continue,iterater的使用上面都有很大问题。
- 我这算是真正的抛砖引玉。
复制代码 |