1

这是我的代码。但它不起作用。请帮助我了解我的问题在哪里。这对我来说很复杂。我的代码必须发现我的 2 个输入是否是字谜。(例如:沉默和倾听)

    import java.util.Scanner ;
    import java.lang.String ;
    public class Anagram {

public static void main(String[] args) {
    Scanner scanner = new Scanner (System.in) ;

    System.out.println("Enter your firs word: ");
    String s1= scanner.nextLine() ;
    System.out.println("Enter your second word: ");
    String s2 = scanner.nextLine() ;

    if(isAnagram(s1,s2)){

        System.out.println("Your words are anagram") ;

  }
}

public static boolean isAnagram(String s1, String s2) {

   int a = s1.length() ;
   int b= s2.length() ;
    if (a==b){
        int count=0;
        int i,j ;
        char x, y ;
        for (i=0, j=0; i<=a; i++){

         x = s1.charAt(i) ;

        y = s2.charAt(j);

        j++;
        if (x==y){
            count++ ;
      while (count==a){
          return true;
      }
                    return false;
        }
    }  
    }

}    

}

4

3 回答 3

3

由于您不能使用数组,因此一种方法可以是:

public boolean isAnagram(String a, String b) {

    if(a.length() != b.length()) return false;

    for (int i=0; i < a.length(); i++) {
        for (int j=0; j <b.length(); j++) {

            if (a.charAt(i) == b.charAt(j))
            {

               a = removeCharAt(a,i);
               b = removeCharAt(b,j);
                i=0;
                j=0;
            }
        }
    }
    return a.equals(b);
}

其中 removeCharAt 是:

public static String removeCharAt(String s, int pos) {
   return s.substring(0,pos)+s.substring(pos+1);

}

第一个测试是验证两个字符串是否具有相同的大小。如果有,那么您首先从第一个字符串中获取一个字符,然后检查该字符是否存在于第二个字符串中。如果存在,则从两个字符串中删除此字符。并从第一个字符串中取出另一个字符并重复该过程,直到没有更多字符可供比较。最后,如果最终结果字符串等于它们是字谜。

您应该删除两个字符串的字符以避免这种情况,例如 string a ="AAAAA" 和 string b ="Abbbb" 它会给你一个字谜。由于字符串“a”的每个字符都将匹配字符串“b”的第一个位置。

您的代码中存在一些问题:

public static boolean isAnagram(String s1, String s2) {

   int a = s1.length() ;
   int b= s2.length() ;

if (a==b){
    int count=0;
    int i,j ;
    char x, y ;
    for (i=0, j=0; i<=a; i++){

     x = s1.charAt(i) ;

    y = s2.charAt(j);

    j++;
    if (x==y){
        count++ ;
  while (count==a){
      return true;
  }
                return false;
    }
}  
}

}

i<=a由于在 for 和. 内,您将遇到超出范围的错误a = s1.length(),在 . 的情况下您不会返回任何内容if (a!=b)。除此之外,您还通过比较同一位置上的每个字符是否相等来比较两个字符串。这种方法不适用于搜索字谜,如果两个字符串相等,它可能会起作用。

于 2012-12-04T23:14:08.103 回答
1

我可能会尝试对字符串进行排序,然后检查它们是否在同一位置具有相同的字母。这将是一个使用 java.util.Arrays 的简单解决方案:

public static boolean isAnagram(String s1, String s2) {
    char[] string1 = s1.toCharArray();
    char[] string2 = s2.toCharArray();
    Arrays.sort(string1);
    Arrays.sort(string2);
    return Arrays.equals(string1, string2);
}
于 2012-12-04T22:55:22.220 回答
-2

您可能需要在方法中声明一个布尔类型 isAnagram 并同时将其设置为 true 或 false,例如

boolean isAnagram;

// Do other stuff
      while (count == a) 
      { 
        isAnagram = true;
      }
        isAnagram = false;
      }
      }
    }
    return isAnagram;
 }

否则你会得到编译错误

于 2012-12-04T22:56:27.320 回答