创建一个方法来反转数组 String[] 然后检查它是否是回文
Creating a method to reverse an array String[] and then checking if it is a palindrome
我必须创建两种方法。一个获取一组字符串并反转它们的顺序。用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 您正在就地编辑数组。所以 backwards 方法不仅 return 一个反向数组,它改变了原始数组。
#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
and 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
}
我必须创建两种方法。一个获取一组字符串并反转它们的顺序。用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 您正在就地编辑数组。所以 backwards 方法不仅 return 一个反向数组,它改变了原始数组。
#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
and 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
}