我必须创建两个方法。一种是获取字符串数组并反转它们的顺序。使用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.iterate
和Arrays.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
}