创建一个方法来反转数组String[],然后检查它是否是回文



我必须创建两个方法。一种是获取字符串数组并反转它们的顺序。使用assertArrayEquals进行测试,反向方法通过。然后我必须创建一个方法来检查字符串数组是否是回文,但如果测试失败。我想也许我在逆向方法中搞砸了什么,但我测试了12种不同的方法。我可能真的很累,但我到底做错了什么?

public static String[] backwards(String[] array) {
for (int index = 0; index < array.length / 2; index++) {
String string = array[index];
array[index] = array[array.length - index - 1];
array[array.length - index - 1] = string;
}
return array;
}
public static boolean isPalindrome(String[] array) {
if (array == backwards(array)) {
return true;
}
return false;
}

这段代码有两个错误:

#1你正在编辑数组。所以backward方法不仅返回一个反向的数组,它还改变了原来的数组。

#2你比较两个数组与==,这将检查它是否相同的实例。你可以用Arrays.equals代替。

public static String[] backwards(String[] array) {
String[] resArray = new String[array.length];
for (int index = 0; index < array.length; index++) {
resArray[index] = array[array.length - index - 1];
}
return resArray;
}
public static boolean isPalindrome(String[] array) {
return Arrays.equals(array, backwards(array));
}

由于Java 9您可以使用IntStream.iterateArrays.compare方法:

public static String[] backwards(String[] array) {
return IntStream.iterate(array.length - 1, i -> i >= 0, i -> i - 1)
.mapToObj(i -> array[i])
.toArray(String[]::new);
}
public static boolean isPalindrome(String[] array) {
return Arrays.compare(array, backwards(array)) == 0;
}
// test
public static void main(String[] args) {
String[] arr = {"backwards", "palindrome", "abracadabra", "abcdcba"};
System.out.println(isPalindrome(arr)); // false
System.out.println(isPalindrome(arr[3].split(""))); // true
}

最新更新