类型不匹配,无法从void转换为char []

时间:2016-04-08 23:17:17

标签: java type-mismatch

我正在测试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 []";
    }
}

5 个答案:

答案 0 :(得分:2)

RelatedUserLink不会返回数组。相反,它会修改数组的内容,只需删除RelatedUserLink2Arrays.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;

}