使用数组的字谜解算器的结束条件:Java

使用数组的字谜解算器的结束条件:Java,java,arrays,character,Java,Arrays,Character,抱歉,如果这是一个有点愚蠢的问题,但我一直有点问题。该项目是一个超级字谜解算器,如果从键盘读取的第一个词组中的字母是从键盘读取的第二个词组中的某些字母的字谜,则返回true。我对该算法的想法是将字符串转换为数组,然后向下搜索第一个字符串的数组,并将每个字符与第二个数组中的每个字符进行比较,试图找到匹配项,如果找到,则将该字符的实例清空,这样就不能再次使用它。如果在第二个数组中搜索字母从未失败,则该方法将返回true;如果找不到字母,则返回false。不过,我不知道如何或在何处放置该返回语句,我画

抱歉,如果这是一个有点愚蠢的问题,但我一直有点问题。该项目是一个超级字谜解算器,如果从键盘读取的第一个词组中的字母是从键盘读取的第二个词组中的某些字母的字谜,则返回true。我对该算法的想法是将字符串转换为数组,然后向下搜索第一个字符串的数组,并将每个字符与第二个数组中的每个字符进行比较,试图找到匹配项,如果找到,则将该字符的实例清空,这样就不能再次使用它。如果在第二个数组中搜索字母从未失败,则该方法将返回true;如果找不到字母,则返回false。不过,我不知道如何或在何处放置该返回语句,我画的是空白

class SuperAnagram {
   public boolean isSuperAnagram(String s, String st){
      s.toLowerCase();
      st.toLowerCase();
      char[] array1 = s.toCharArray();
      char[] array2 = st.toCharArray();
      for(int i = 0;(i<array1.length);i++){
         for(int j = 0;(j<array2.length);j++){
           if (array1[i] == array2[j]){
           array2[j] = ' ';

           }
          }
         }
        }
       }           

如果我没弄错你的问题,这是你解决问题的一种方法

您可以使用布尔值作为标志:

public boolean isSuperAnagram(String s, String st){
    s.toLowerCase();
    st.toLowerCase();
    char[] array1 = s.toCharArray();
    char[] array2 = st.toCharArray();

    boolean myFlag = true; // flag is initially true to enter the loop

    // added another condition to the loop - will exit if myFlag == false
    for(int i = 0; i < array1.length && myFlag; i++){
        myFlag = false;
        for(int j = 0; j < array2.length; j++){
           if (array1[i] == array2[j]){
               array2[j] = ' ';
               myFlag = true;   // found a match, set our flag == true
               // we only want to replace ONE letter, not ALL (so break out of the loop)
               break; 
           }
        }
    }

    // will only return true if every letter in array1 matched some letter in array2
    return myFlag;
}

您忘记返回布尔值。在if语句的末尾
返回真值

您将以艰难的方式进行操作。字谜可以归结为每个字符出现的次数。你不需要做任何搜索,只需要计数。@Kon,如果OP只想测试两个字符串是否是彼此的字谜,那么你是对的,但他真正想要的是一个字符串是否是另一个字符串的字谜,即不一定是另一个字符串的所有字母。也许这一规定的目的正是为了排除你所建议的解决方案。@JohnBollinger-Oops,读得不够清楚。感谢您理解了问题的正确性,这确实是我试图做的,这适用于大多数较短的输入,但由于某些原因,现在我遇到了一些较长字符串的问题。clinteastwood和oldwestaction应返回true,但返回false。@RadiumBlue问题是当您有多个相同的字母时。例如,当你来到clinteastwood中的第一个't'时,它会将OldEstation中的两个't'都变成空格,而不是它找到的第一个。我可以更新我的答案来解决这个问题。不过,我需要在第二个循环中的myFlag后面插入一个分隔符,以确保在某些情况下不会两次将字母清空。非常感谢。