如何使用嵌套的for循环解决此问题

时间:2019-12-15 20:34:34

标签: java

我的目标是打印出2个字母相同的名称,但名称中只有一个字母相同。例如,小溪将被印刷为布鲁克,而米歇尔将被印刷为米歇尔。我的代码有什么问题?

   for(int a = 0; a < word_1.length(); a++)
         {
              mychar = word_1.charAt(a);
               for(int c = 1; c <word_1.length(); c++)
                 {
                    mychar_2 = word_1.charAt(c);
                      if(mychar == mychar_2)
                      {
                           word_3 = word_3 + "";
                       }
                       else 
                         {
                             word_3 = word_3 + mychar;
                         }
                     }
         }
  System.out.println(word_3);

2 个答案:

答案 0 :(得分:-1)

更好的问题是“什么是正确的代码”。基本上,这个想法看起来像是遍历所有字母,然后遍历所有匹配项。这还不错,我们可以稍微更改您的代码以使其起作用(请参见评论):

for(int a = 0; a < word_1.length(); a++)
{
    char mychar = word_1.charAt(a);

    // flag for matching letters
    Boolean found = false;

    // you go through only previous characters!
    for(int c = 0; !found && c < a; c++)
    {
        char mychar_2 = word_1.charAt(c);
        if(mychar == mychar_2)
        {
            found = true;
        }
    }

    // here you add character if no match found
    if(!found) {
        word_3 = word_3 + mychar;
    }
}

这是学术编码的一种好方法,但是在实际项目中,如果您处理大量单词,则必须考虑基于Map的解决方案以保留所有现有字母,并且每个单词仅迭代一次。或者,您可以在众多Java库中搜索某些方法来完成这项工作

答案 1 :(得分:-1)

这可以解决问题:

        String testWord = "brook";
        List<String> testSet = new ArrayList<String>();
        for (int i = 0; i < testWord.length(); i++) {
            if (!testSet.contains(String.valueOf(testWord.charAt(i)))) {
                testSet.add(String.valueOf(testWord.charAt(i)));
            }
        }
        StringBuilder builder = new StringBuilder();
        for (Object s : testSet.toArray()) {
            builder.append((String) s);
        }
        String str = builder.toString();
        System.out.println(str);