2016-04-08 2 views
0

Я тестирую, если 2 строки являются анаграммами. Я подумал, что если я сделаю их массивами, сортируйте их, и они окажутся равными, это анаграммы. У меня есть ошибка компилятора типа mismatch, хотя, и я не могу понять, почему.Тип несоответствие, не может преобразовать из void в char []

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

Тип возврата «Arrays.sort» недействителен. – piyush121

ответ

2

Arrays.sort() не возвращает массив. Вместо этого он изменяет содержимое массива, просто удалите части char[] s1Sorted = и char[] s2Sorted =. Кроме того, используйте Arrays.equals() для сравнения массивов, а операторы System.out.println() печатают строки, а не массив. Чтобы преобразовать массив в строку, сделайте Arrays.deepToString, или если вы просто хотите получить строковое представление массива char, сделайте new String(param), где param - массив символов.

+0

Спасибо, все работает безупречно. – stfudonny

1

Arrays.sort метод void, потому что он работает, изменяя массив, который вы передали ему.

Кроме того, сортировка массива, который вы получаете от toCharArray, не будет сортировать символы в исходной строке. String является неизменным (не может быть изменено), поэтому toCharArray возвращает новый массив.

Правильный способ сортировки символов строки - это.

String string = "SPOILAGE"; 
char[] arr = string.toCharArray(); 
Arrays.sort(arr); 
String word = new String(arr); 
System.out.println(word); 
1

Просто эти две строки:

Arrays.sort(s1Char); Arrays.sort(s2Char);

Он будет автоматически сортировать эти массивы символов. Не нужно переписывать его.

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 []"; 
} 
+0

Нет, это не исправленный код. Операторы 'System.out.println' не выводят ожидаемый результат. –

+0

да, правда. Я не обращал внимания на это заявление на печать. –

0

Arrays.sort (полукокс []) представляет собой метод, который возвращает недействительным. Измените ваш метод на:

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; 

} 
Смежные вопросы