2015-03-13 181 views
-1

现在我的程序输出[m,r,rm,ru,rum,u,um],由于某种原因,递归方法不会输出rm答案。我一直在追踪它,但我似乎无法正确追踪它,并找出问题所在。我不确定缺失的子集在哪里?谢谢!子集生成器缺少一个可能的子集

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 
/** 
    Prints subsets of String 
*/ 

public class SubsetGenerator 
{ 
    private String word=""; 

    private ArrayList<String> subsets; 

    /** 
     Constructs a word to generate subsets from 
     @param text input by user 
    */ 
    public SubsetGenerator(String textinput) 
    { 
     word=textinput; 
     subsets = new ArrayList<String>(); 
    } 



    /** 
     retrieves word 
     @return the word 
    */ 
    public String getWord() 
    { 
     return word; 
    } 




    /** 
     get subsets 
     @return subset arraylist 
    */ 
    public ArrayList<String> getSubsets() 
    { 
     if(word.length()==0) 
     { 
      subsets.add(""); 
      return subsets; 
     } 
     else 
     { 
      String removed=word.substring(0,1); 
      word=word.substring(1); 
      subsets.add(removed); 

      for(int i=0;i<word.length();i++) 
      { 
       String temp=removed+word.substring(0,i+1); 
       subsets.add(temp); 
      } 
     } 

     getSubsets(); 
     return subsets; 
    } 
} 



/** 
    This program tests the subset generator. 
*/ 
public class SubsetGeneratorTester 
{ 
    public static void main(String[] args) 
    { 
     SubsetGenerator generator = new SubsetGenerator("rum"); 

     List<String> subsets = generator.getSubsets(); 
     // Sort the result for checking 
     Collections.sort(subsets); 
     System.out.println(subsets); 
     System.out.println("Expected: [, m, r, rm, ru, rum, u, um]"); 
    } 
} 
+2

你说你得到 “RM”:'现在我的计划产出[M,R,RM,RU,朗姆酒,U庵]' – amit 2015-03-13 08:43:05

+0

此外,你有一个设计问题 - 这是不是一个将'word'和'subsets'设置为类成员的好习惯,将它们设置为'getSubsets()'的参数要好得多。 – amit 2015-03-13 08:44:49

+0

@amit这就是预期值,预期值是[,m,r,rm,ru,rum,u,um],我的程序输出的结果是相同的东西减去rm – javaProgrammer 2015-03-13 08:48:40

回答

0

你需要沿着word.substring()的出发点也进行迭代,如果你想赶上rm

public ArrayList<String> getSubsets() 
{ 
    if(word.length()==0) 
    { 
     subsets.add(""); 
     return subsets; 
    } 
    else 
    { 
     String removed=word.substring(0,1); 
     word=word.substring(1); 
     subsets.add(removed); 

     for(int i=0;i<word.length();i++) 
     { 
      for(int j=0; j<=i; j++){ 
       String temp=removed+word.substring(j,i+1); 
       subsets.add(temp); 
      } 
     } 
    } 

    getSubsets(); 
    return subsets; 
    } 
}