我正在测试2个字符串是否为字谜。我想如果我把它们制成阵列然后对它们进行排序,它们就会变得平等,它们就是字谜。我有一个类型不匹配的编译器错误,但我无法弄清楚原因。
package local.random;
import java.util.Arrays;
public class Anagram {
public static void main(String[] args) {
String s1 = "go hang a salami";
String s2 = "im a lasagna hog";
System.out.println(s1);
System.out.println(s2);
System.out.println(IsAnagram(s1,s2));
}
public static boolean IsAnagram (String s1, String s2)
{
char[] s1Char = s1.toCharArray();
char[] s2Char = s2.toCharArray();
char[] s1Sorted = Arrays.sort(s1Char);//Type mismatch: cannot convert from void to char[]
char[] s2Sorted = Arrays.sort(s2Char);
System.out.println("The first string sorted alphabetically is :" + s1.toString());
System.out.println("The first string sorted alphabetically is :" + s2.toString());
if (s1Sorted.equals(s2Sorted)){
return true;
}
else return false;
}
public String toString() {
return "Anagram []";
}
}
答案 0 :(得分:2)
RelatedUserLink
不会返回数组。相反,它会修改数组的内容,只需删除RelatedUserLink2
和Arrays.sort()
部分。此外,使用char[] s1Sorted =
来比较数组,并且char[] s2Sorted =
语句打印字符串,而不是数组。要将数组转换为字符串,请执行Arrays.equals()
,或者如果您只想要char数组的字符串表示,请执行System.out.println()
,其中param是char数组。
答案 1 :(得分:2)
这是更正后的代码。
sort将Array作为引用,它不会返回任何内容。
数组比较可以通过Array.equals
public class Anagram {
public static void main(String[] args) {
String s1 = "go hang a salami";
String s2 = "im a lasagna hog";
System.out.println(s1);
System.out.println(s2);
System.out.println(IsAnagram(s1, s2));
}
public static boolean IsAnagram(String s1, String s2) {
char[] s1Char = s1.toCharArray();
char[] s2Char = s2.toCharArray();
Arrays.sort(s1Char);//Type mismatch: cannot convert from void to char[]
Arrays.sort(s2Char);
//need to construct a new String to print.
System.out.println("The first string sorted alphabetically is :" + new String(s1Char));
System.out.println("The first string sorted alphabetically is :" + new String(s2Char));
return Arrays.equals(s1Char, s2Char);
}
@Override
public String toString() {
return "Anagram []";
}
答案 2 :(得分:1)
Arrays.sort
是一种void
方法,因为它可以通过更改传递给它的数组来实现。
此外,对从toCharArray
获得的数组进行排序不会对原始字符串中的字符进行排序。 String
是不可变的(无法更改),因此toCharArray
会返回 new 数组。
对字符串字符进行排序的正确方法是:
String string = "SPOILAGE";
char[] arr = string.toCharArray();
Arrays.sort(arr);
String word = new String(arr);
System.out.println(word);
答案 3 :(得分:1)
只需将这两行:
Arrays.sort(s1Char);
Arrays.sort(s2Char);
它会自动对这些char数组进行排序。无需重新分配。
答案 4 :(得分:0)
Arrays.sort(char [])是一个返回void的方法。 将您的方法更改为:
public static boolean IsAnagram (String s1, String s2)
{
char[] s1Char = s1.toCharArray();
char[] s2Char = s2.toCharArray();
Arrays.sort(s1Char);
Arrays.sort(s2Char);
char[] s1Sorted = s1Char;
char[] s2Sorted = s2Char;
System.out.println("The first string sorted alphabetically is :" + s1.toString());
System.out.println("The first string sorted alphabetically is :" + s2.toString());
if (s1Sorted.equals(s2Sorted)){
return true;
}
else return false;
}