【问题标题】:Creating a method to reverse an array String[] and then checking if it is a palindrome创建一个方法来反转数组 String[] 然后检查它是否是回文
【发布时间】:2021-02-19 07:42:52
【问题描述】:

我必须创建两个方法。一个接受一个字符串数组并颠倒它们的顺序。使用assertArrayEquals测试,backwards方法通过。然后我必须创建一个方法来检查字符串数组是否是回文,但如果失败则测试。我想也许我在反向方法中搞砸了,但我测试了 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;
}

【问题讨论】:

    标签: java arrays palindrome


    【解决方案1】:

    这段代码有两个问题:

    #1 您正在就地编辑数组。所以backwards方法不仅返回一个反转的数组,它还改变了原来的数组。

    #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));
    }
    

    【讨论】:

      【解决方案2】:

      从 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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 1970-01-01
        • 2021-05-21
        • 2016-05-08
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多