黑马程序员技术交流社区

标题: 求解一个关于ArrayList和Iterator的问题 [打印本页]

作者: 韩伟    时间: 2012-7-23 17:19
标题: 求解一个关于ArrayList和Iterator的问题
本帖最后由 韩伟 于 2012-7-23 17:29 编辑

/**
* 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
import java.util.*;
class ThreeUnitNum
{
static ArrayList al = new ArrayList();
public static void main(String []args)
{
  int [] arr = {1,2,3,4};
  createNum(arr);
  judgeNum();
  for(int i=0;i<al.size();i++)
   System.out.print(al.get(i)+"  ");
}

public static void createNum(int []arr)
{
  for(int i=0;i<arr.length;i++)
   for(int j=0;j<arr.length;j++)
    for(int k=0;k<arr.length;k++)
     al.add(arr*100+arr[j]*10+arr[k]);
}

public static void judgeNum()       //这个函数有问题,请问这里改怎么做,如果要用迭代器又该怎么做
{
  for(int i=0;i<al.size();i++)
  {
   int temp = Integer.parseInt(al.get(i).toString());
   if((temp%10==temp/100)||(temp%10==temp/10%10)||(temp/100==temp/10%10))
    al.remove(temp);   
  }
}
}

如果我再声明一个ArrayList的话可以解决这个问题,但是我感觉那不优化。还有一点儿就是,集合声明的是静态的,这样会不会不好,如何能优化一下。
求高手指点!


作者: 王贵朝    时间: 2012-7-23 17:22
我觉得可以实现iterator
作者: 陈少文    时间: 2012-7-23 18:57
本帖最后由 陈少文 于 2012-7-23 19:00 编辑

/*
* 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  思路1.
        百为数有4个选择,不重复的话十位数就有3个选择,个位2个选择
           4*3*2=24位。
        可以得出个数
        思路2:百位可以从1到4,十位从1到4,个位从1到4,它们各不相等,就可以了
        因为,比喻百位数为1,十位,个位只能从2,3,4中进行选择。
*
* */
public class count {
        
        public static void main(String[] args)
        {
                   int n = 0;
                for(int i = 1; i <= 4; i++)
                    for(int j = 1; j <= 4; j++)
                        for(int k = 1; k <= 4; k++)
                            if(i != j && j != k && i != k && ++n != 0)
                                System.out.println("NO."+n+":"+i+""+j+""+k);
                System.out.println("共有:" + n + "种");

        }

}

结果如下所示:



作者: 李东升    时间: 2012-7-23 19:10
你的程序我没运行出来,,你没发现很麻烦么。。
看看我改进的。
  1. static ArrayList list=new ArrayList();
  2.         public static void main(String []args){
  3.                 int[] a={1,2,3,4};
  4.                 for(int i=a[0];i<=a.length;i++){
  5.                         for(int j=a[0];j<=a.length;j++){
  6.                                 for(int k=a[0];k<a.length;k++){
  7.                                         if(i==j){
  8.                                                 continue;
  9.                                         }
  10.                                         if(j==k){
  11.                                                 continue;
  12.                                         }
  13.                                         if(k==i){
  14.                                                 continue;
  15.                                         }
  16.                                         list.add(i*100+j*10+k);
  17.                                 }
  18.                         }
  19.                 }
  20.                 for(Object o:list){
  21.                         System.out.print(o+"\t");
  22.                 }
  23. }
复制代码
输出的貌似没错的说。
  1. 123        124        132        134        142        143        213        214        231        234        241        243        312        314        321        324        341        342        412        413        421        423        431        432
复制代码

作者: 魏-玉-彪    时间: 2012-7-23 19:18
这是个排列组合问题呀,要精通排列组合才可以




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