Java:未知数量的'for'循环

时间:2016-01-06 13:20:10

标签: java loops for-loop

我想制作一个不会混淆某些词语的程序 我需要尝试可以形成的单词的所有可能组合,然后检查它是否包含在名为dict的String变量中。

我的代码是:

public class UnJumble
{
    public static void main(String args[])
    {
        String dict = "cat, rat, mat dog, let, den, pen, tag, art,";

        String t = "tra";
        int l = t.length();
        for(int i=0; i<l; i++)
        {
              char a=t.charAt(i);
              t = t.replaceFirst(a+"","");
              l--;
              for(int j=0; j<l; j++)
              {
                    char b = t.charAt(j);
                    t = t.replaceFirst(b+"","");
                    l--;
                    for(int k=0; k<l; k++)
                    {
                          char c = t.charAt(k);
                          if(dict.contains(""+a+b+c+","))
                          {
                                System.out.println("\'"+a+b+c+"\' found.");
                                break;
                          }
                    }
                    l++;
                    t = new StringBuilder(t).insert(j,b+"").toString();
              }
              t = new StringBuilder(t).insert(i,a+"").toString();
              l++;
        }
    }
}

变量t包含要无杂乱的字。

使用此代码,输出为:
'rat' found.
'art' found.

我认为我需要尽可能多的for循环和字符串t中的字符。

但是我想让它能够解读未知长度的单词。那我怎么能实现这个呢?

我试过在互联网上搜索,并在SO上搜索。我在SO上找到了一些用其他编程语言编写的答案,我不明白。

2 个答案:

答案 0 :(得分:0)

你应该寻找递归方法。

例如,给定strn个字符的字符串,您可以编写一个基本执行此操作的函数:

List<String> compute(String str)
    // TODO : Handle case where str has only 1 character
    List<String> list = compute(str.substring(0,n-2))
    // TODO : Compute all combinations of str[n-1] with list
    return list;

我想在某些情况下可以改进很多。

答案 1 :(得分:0)

对于变量t中的每个字母没有for循环,有一种棘手的方法,但它是代码密集型的。 您可以设置一个以n为基数的循环,其中n是t的长度。假设我是你的计数器:每次通过该循环,你使用i中的各个数字作为t的索引,然后建立一个&#39;字&#39;并根据你的字典测试这个词。您正在使用两种不同的方式:作为计数器和一组数字,表示您的t的索引。

例如,如果你的t有三个字母,那么你想要像这样计算基数3:012,020,021,022,100,101,110,111等等。现在,逻辑需要验证您的数字组合是否唯一,这样您在构建单词时就不会使用两次字母。

这项工作很多,但算法是正确的。好处是它适用于任何长度的字符串。

我知道我会被投票,但是哦。