我有一个字符串
String a="100,200,1000";
现在想实现一下这段代码
for(int i=0;i<100;i++){
 for(int i=0;i<200;i++){
  for(int i=0;i<1000;i++){  }
 }
}
可是,我的a中的字符串的长度和位数都不一定,或许是String a="100,200,1000,9";
求一段简洁程序,实现上边逻辑

解决方案 »

  1.   

    把你的字符串a用split(a,",")分割开来不就可以了吗?
      

  2.   

    另外写一个方法,get(int n)用来取得第几个数,1就是阿String[] cha = a.split(a,",");
    return cha[n];思路是这样的
      

  3.   

    doFor(List list){
    for(int i=0;i<list.get(0);i++){
    //dosomething
     list.remove(0);
     if(list.size()>0){
        doFor(list);
      }
    }
    }
      

  4.   

    我有一个字符串 
    String   a="100,200,1000"; 
    现在想实现一下这段代码 
    for(int   i=0;i <100;i++){ 
      for(int   j=0;j <200;j++){ 
        for(int   k=0;k <1000;k++){ 
          if(i*j*k==100){//主要是用循环找到符合条件的i,j,k}
        } 
      } 

    可是,我的a中的字符串的长度和位数都不一定,或许是String   a="100,200,1000,9"; 
    求一段简洁程序,实现上边逻辑
      

  5.   


    String[] cha = a.split(a,",");
    int n = cha.length;
    int index=n;
    while(index != 0){
     for(int i =0; i <cha[index]; i++)
    {//TODO}
    }笨方法的流程
      

  6.   

    doFor(List list){
    for(int i=0;i<list.get(0);i++){
    //dosomething
     list.remove(0);
     if(list.size()>0){
        doFor(list);
      }
    }
    }这个代码已经实现了你要求的递归循环,然后就是一个判断过程,你这个题目只是一个简单的递归算法,主要就是写一个递归函数
      

  7.   

    简单的方法,用commons-lang-2.3
    提供的StringUtils中的split方法进行字符分割
    然后将每个字符串转换成int然后进行循环
    至于根据能转换成几个int型,有几次循环
    就不得而知了 ,学习ing
      

  8.   

    我的思路比较复杂,但是面向对象的。这个问题可以转化成一个N位M进制数的递增问题。大意如下:
    class StrangeNumber{
      int[] max;
      int[] current;
      public void increase(){
      }
      public boolean satisfied(){
      }  
    }其中,max记录由a拆开后的数字,也就是说每位允许的最大数字
    current记录当前数字,初始全部为0。
    increase负责将current的最末位增1,各位进位规则是达到对应max中的值。
    satisfied方法判断current中的各位数字是否符合要求。
      

  9.   

    9楼,你的递归我没看明白,愚钝了我有一个字符串 
    String   a="100,200,1000"; 
    然后用split把a分割了
    现在想实现一下这段代码 
    for(int   i=0;i <100;i++){ 
      for(int   j=0;j <200;j++){ 
        for(int   k=0;k <1000;k++){ 
          //最重要的,我是想实现这里的逻辑,我想把所有符合条件的ijk都找出来
        } 
      } 

      

  10.   


    package com.capinfo.test;public class StringTest {
    public static void main(String[] args) {

    String s="100,200,1000,9,2000";
    digui(s);
    }
    /**
     * @param s
     * @author sundful
     * @vesion 1.0
     */
    public static void digui(String s)
    {
    String s1="";
    String s2="";
    if("".equals(s) || s.trim().length()<0) return;
    int num=s.indexOf(",");
    if(num !=-1)
    {
     s1=s.substring(0,num);
     s2=s.substring(num+1);
     for(int i=0;i<Integer.parseInt(s1);i++)
     {
     digui(s2);
     System.out.println(i);
     }
    }
    }
    }
      

  11.   

    还有,以上提供递归算法的也都可以,但要求给递归函数再传递一个参数,表示当前已经循环到的i.j.k.l等,否则搂主无法判断当前循环变量是否符合要求。
      

  12.   

    以下应该可以满足楼主您的要求,用递归。
    public class MTest {    private static int count = 1;
        public static void main (String [] args) {
            String a = "1,7,3,4";
            String[] lens = a.split("[,]");
            doLoop(lens, 0);
        }    public static void doLoop(String [] lens, int index) {
            if (index != lens.length) {
                int range = Integer.parseInt(lens[index]);
                for (int i = 0; i < range; i++) {
                    doLoop(lens, index + 1);
                }
            } else {
                System.out.println("doLoop" + String.valueOf(count));
                count++;
            }
        }
    }
      

  13.   

     public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] a = {1,1,2,3};
            execute(a,0);
        }
        
        public static void execute(int[] a,int index){       
            if (index >= a.length)
                return;
            for (int i = 0; i < a[index]; i++){
                //some code here                       
                execute(a,index + 1);
                
            }
        }
      

  14.   

     public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] a = {1,1,2,3};
            execute(a,0);
        }
        
        public static void execute(int[] a,int index){       
            if (index >= a.length)
                return;
            for (int i = 0; i < a[index]; i++){
                //some code here                       
                execute(a,index + 1);
                
            }
        }
      

  15.   

    String   a="1,2,2,3"; 
    String[] arr = a.split(",");
    int len = arr.length;
    int[] loop = new int[arr.length];
    int[] curr = new int[arr.length];
    for(int i=0;i<loop.length;i++)
    loop[i] = new Integer(arr[i]).intValue();

    for(int i=0;curr[0]<loop[0];i++){ for(int j=0;j<loop.length;j++)
    System.out.print(curr[j]+"\t");
    System.out.println(); curr[len-1]++;

    for(int j=len-1;j>0;j--){
    if(curr[j]==loop[j]){
    for(int k=j;k<len;k++)
    curr[k]=0;
    curr[j-1]++;
    }
    }

    if(i>=loop[len-1]){
    i=0;
    }

    }
      

  16.   

    谢谢aoenzh,不过我觉得我的代码还是不够简洁,希望其他高手给点指点!
      

  17.   

                if(i>=loop[len-1]){
                    i=0;
                }
    这块不要,忘去掉了.
      

  18.   

    深度优先搜索问题。
    List<Integer> LoopDo(List<Integer> intList,List<Integer> indexList) {
       if (intList.size == 0) {
           //伪代码
           if indexList的所有元素的集合满足你的要求,输出你所有的元素。
           return indexList;
       }
       for (int i=0; i<intList.get(0).intValue; i++) {
          LoopDo(intList.subList(1,intList.size()),indexList.add(new Integer(i)));
       }
    }调用方法
    main(){
       List<Integer> intList = 你的string中分割得到的list
       List<Integer> indexList = new ArrayList<Integer>();
       LoopDo(intList,indexList);
    }
      

  19.   

    class StrangeNumber{
    int[] max;
    int[] current;

    public static void main(String[] args){
    String       a="100,200,1000";
    StrangeNumber num=new StrangeNumber(a);
    while(!num.reachMax()){
    num.increase();
    if (num.satisfied()){
    //实现要做的事情
    }
    }
    }



    public StrangeNumber(String str){
    String[] segs=str.split(",");
    max=new int[str.length];
    current=new int[str.length]
    for(int i=0; i<segs.length;i++){
    max[i]=Integer.parseInt(segs[i]);
    current[i]=0;
    }
    }

    public void increase(){
    current[current.length-1]++;
    for(int i=current.length-1;i--;i>=0){
    if (current[i]>=max[i]){
    current[i]=0;
    current[i-1]++;//简单起见,先不处理下标越界
    }
    }
    }

    public boolean reachMax(){
    //判断各位是否已经达到最大
    }

    public boolean satisfied(){
    //计算current的当前各位数字是否符合要求
    }


    }
      

  20.   

    看到贴了,乍一看很简单,细看要求,还真不好做,写的不简洁。
    有点想法写出来不知道对不对,仅供参考。
    ……
        String[] array = a.split(",");
        int n = array.length;
        int[] result = new int[n];
       
        public void execute(int value)
        {
             int testValue;
             if(n==array.length)//第一次执行给 value 赋值
                 value=1;          n--;
             for(int i=0;i<Integer.parseInt(array[n]);i++)
             {
                  testValue=value*i;
                  result[n]=i;
                  if(n==0&&testValue==100)//找到了符合条件的一组数,存在数组 result 中
                  {
                        ……//
                       return;
                   }  
                   if(n>0) 
                   {
                       execute(testValue);//递归
                    }
                   if(n<0) return;
              }
              
         }……
      

  21.   

    可以再少一点。
    ……
            String[]   array   =   a.split(",");
            int   n   =   array.length;
            int[]   result   =   new   int[n];
         
            public   void   execute(int   value)
            {
                  n--;
                  for(int   i=0;i <Integer.parseInt(array[n]);i++)
                    {
                            result[n]=i;
                             if(n==0)//找到了一组数,存在数组   result   中
                             {
                                        ……//对组数进行判断,看是否符合条件。
                                      return;
                              }    
                              else if(n> 0)  
                              {
                                      execute();//递归
                              }
                             else if(n <0)   
                                 return;
                      }
               } 
    ……