【问题标题】:I am trying to reverse an array the user inputs like {hello, Donald, Trump} -> pmurT, dlanoD etc but it outputs [null] [closed]我正在尝试反转用户输入的数组,例如 {hello, Donald, Trump} -> pmurT, dlanoD 等,但它输出 [null] [关闭]
【发布时间】:2020-08-19 11:06:46
【问题描述】:

我是 java 新手,想反转用户输入的数组(包括字符),所以 apple、banana 变成 ananab、elppa。但它输出 [null]

package test;

import java.util.Arrays;
import java.util.Collections;

import javax.swing.JOptionPane;

public class WhileWarmup{

    public static void main(String[] args) {
        String shoppinglist = JOptionPane.showInputDialog("What do you want to manipulate");
        String[]Shoppinglist = shoppinglist.split(",");
        String[]Shoppinglist1 = shoppinglist.split(",");
        
        int num = Shoppinglist.length;
        String bruh = "";
        String bruh1 = "";
        while (num >= 0) {
            Shoppinglist1 = Arrays.copyOfRange(Shoppinglist,num,num + 1);
            Collections.reverse(Arrays.asList(Shoppinglist1));
            bruh1 =  Arrays.toString(Shoppinglist1);
            bruh = bruh + bruh1;
            num = num - 1;
            System.out.println(bruh);
        }
    }
}

【问题讨论】:

  • 你试过调试你的代码吗?在我看来,Arrays.copyOfRange 并没有像你认为的那样做。
  • 这能回答你的问题吗? Reverse a string in Java
  • 另请注意:您将自己的生活过于复杂化了。您想了解的问题:如何完全反转一些字符串数组。然后编写执行此操作的代码:尝试反转已知的 HARDCODED 字符串数组。你看,所有 Swing UI 的东西,以及在你的值中输入所花费的时间......这与你的根本问题无关。记住:将你的问题归结为核心,并摆脱任何对它没有贡献的东西。那么你就不需要在问题标题中给出你的例子了。然后你的代码会告诉我们你做了什么。
  • 还有:了解 java 命名约定。变量名总是以驼峰命名。所以“Shopplinglist”听起来更像是某个类的名称。而且当然。真正的答案是:不要只是盲目地使用一些库方法。阅读相应的 java doc 以了解它应该做什么
  • 最后:你期待什么?我不会说你在你的例子中使用的那个人的名字......基本上类似于一个空虚。将其反转导致 null 也就不足为奇了。

标签: java arrays list null reversing


【解决方案1】:

在反转字符串时,StringBuilder#reverse 始终存在:

    public static void main(String[] args) {
        List<String> wordList = Arrays.asList("hello", "Donald", "Trump");
        System.out.println(reverseListAndItsElements(wordList));
    }

    public static List<String> reverseListAndItsElements(List<String> list) {
        List<String> reversed = new ArrayList<>(list);//Create a copy
        Collections.reverse(reversed);
        return reversed.stream().map(s -> new StringBuilder(s).reverse().toString())
            .collect(Collectors.toList());
    }

打印:

[pmurT, dlanoD, olleh]

如果你不想弄乱列表:

public static void main(String[] args) {
    String original = "hello,Donald,Trump";
    String[] split = original.split(",");
    String[] reversedSplit = new String[split.length];
    IntStream.range(0, split.length).forEach(index -> {
        reversedSplit[index] = new StringBuilder(split[index]).reverse().toString();
    });
    System.out.println(Arrays.toString(reversedSplit));
}

【讨论】:

  • 我想反转一个数组而不是一个字符串
  • @WilliamGreenfield 我更新了我的答案。顺便说一句,你的标题说你想反转字符串。
【解决方案2】:

试试这个。

String[] input = {"hello", "Donald", "Trump"};
String[] reversed = new StringBuilder(String.join(",", input))
    .reverse().toString().split(",");
System.out.println(Arrays.toString(reversed));

输出:

[pmurT, dlanoD, olleh]

【讨论】:

    【解决方案3】:

    你可以使用下面的代码

    public static List<String> reverseList(List<String> list) {
            List<String> reversed = new ArrayList<>(list);
            Collections.reverse(reversed);
            return reversed.stream().collect(Collectors.toList());
        }
    

    【讨论】:

    • 我想反转数组而不是字符串
    • @WilliamGreenfield 问题标题另有说明。所以:明确你的要求。您问“如何做 X”,这个答案解释了您的要求。
    • 我更新了代码,它只会颠倒元素的顺序。希望它会有所帮助
    【解决方案4】:

    此代码可用于字符串数组反向实现。有很多方法可以反转字符串。一种是使用我用过的StringBuilder。

    public class Main
    {
     static String[] arr={"hello", "Donald", "Trump"};
      public static void main (String[]args)
     {
    String[] strA=  reverseTheString(arr);
    
    for(int i=0;i<strA.length;i++){
        System.out.println(""+strA[i]);
    }
    }
    

    // 这是反转数组元素的实际方法。

    public static String[] reverseTheString(String[] arr){
     String[] reverseArray=new String[arr.length];
    int j=arr.length-1;
    
    for(int i=0;i<arr.length;i++)
      {
          StringBuilder sb=new StringBuilder(arr[i]);
        reverseArray[j]=sb.reverse().toString();
        j--;
     }
    return reverseArray;
     }
    }
    

    【讨论】:

    • 不知道为什么它被否决了。它给出了所需的结果,用户可以编写任何特定的算法/逻辑来使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多