控制字谜词

时间:2012-12-04 22:45:58

标签: java algorithm

这是我的代码。但它不起作用。请帮我解决我的问题所在。这对我来说非常复杂。我的代码必须发现我的2个输入是anagram或不是。 (例如:沉默和倾听)

    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;
        }
    }  
    }

}    

}

3 个答案:

答案 0 :(得分: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);

}

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

你应该删除两个字符串的字符以避免对于字符串a =“AAAAA”和字符串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内的a = s1.length(),您将超出范围错误。在if (a!=b)的情况下,您不会返回任何内容。除此之外,您要比较两个字符串,通过比较同一位置上的每个字符是否相等。这种方法不适用于搜索anagram,它可能有助于搜索两个字符串是否相等。

答案 1 :(得分: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);
}

答案 2 :(得分:-2)

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

boolean isAnagram;

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

否则您将收到编译错误