这是我的代码。但它不起作用。请帮我解决我的问题所在。这对我来说非常复杂。我的代码必须发现我的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;
}
}
}
}
}
答案 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;
}
否则您将收到编译错误