【问题标题】:Problem With Reversing Each Number In An Array In Java在Java中反转数组中的每个数字的问题
【发布时间】:2019-04-19 14:09:01
【问题描述】:

我正在尝试使用 do-while 反转 Integer 数组中的每个数字,但出现 NullPointerException 错误。我正在尝试反转此数组中的每个元素:例如,如果这是我的数组:{12,34 ,56} 那么结果必须是:{21,43,65}。有人可以帮我解决这个问题吗?

public class Reverse {
  public int[] revCalculator(int[] number) {
    int[] reverse = null;
    for (int j = 0; j < number.length; j++) {
        do {
            reverse[j] = reverse[j] * 10 + number[j] % 10;
            number[j] /= 10;
        } while (number[j] > 0);
    }
    return reverse;
  }
}

public class ShowReverse {

  public static void main(String[] args) {

    // instantiation
    // -----------------------------------------
    Reverse rev = new Reverse();
    @SuppressWarnings("resource")
    Scanner in = new Scanner(System.in);


    System.out.println("Enter The Number Of Elements: ");
    int len = in.nextInt();
    int[] numbers = new int[len];


    for (int i = 0; i < len; i++) {
        System.out.println("Enter Number: ");
        numbers[i] = in.nextInt();
    }


    int[] result = rev.revCalculator(numbers);

    // shows the result
    // -----------------------------------------
    System.out.println("THE REVERSE WOULD BE: ");
    System.out.print(result);

  }
}

pic

【问题讨论】:

  • int[] 反向 = null;反向未初始化
  • 如你所见,我用过……但没用
  • 不先创建就无法使用。这就是您在这里获得 NPE 的原因。
  • reverse 被设置为空。您不能将 null 视为数组。您需要将 reverse 初始化为 实际 数组:int[] reverse = new int[number.length]'
  • 谢谢..你能检查一下图片并指导我完成结果吗?

标签: java arrays loops reverse do-while


【解决方案1】:

你没有初始化你的变量reverseArray,像这样初始化它:

更新,我知道你在做什么,你想要反转数组的值,而不是数组本身

public int[] revCalculator(int[] number) {
    int[] reverse = new int[number.length]; //Initialize it to the same size as the passed in arary
    //int[] reverse = null; //Problem
    StringBuilder sb = new StringBuilder();
    for (int j = 0; j < number.length; j++) 
    {
        //You could convert the number to string then reverse it and use parseInt() int
        reverse[j] = parseInt(sb.append(number[j].toString()).reverse().toString());
        //Clear the StringBuilder object
        sb.setLength(0);

    }
    return reverse;
}

【讨论】:

  • 谢谢,但现在我在向我展示结果时遇到了问题......你能检查一下图片吗?
  • 谢谢...帮助...我所要做的就是在打印结果时进行迭代!
  • @Rojin 很高兴我能帮上忙,我也更新了我的答案,因为在每次迭代中创建一个新的 StringBuilder 是浪费的,如果你走 StringBuilder 路线/解决方案,你只需创建一个StringBuilder 并清除其中的缓冲区。
【解决方案2】:

我建议将反向数组初始化为与数字数组长度相同的数组。

int[] reverse = new int[number.length];

【讨论】:

  • 现在我在显示结果时遇到了问题......你能检查一下图片吗?
【解决方案3】:

您必须进行一些更改:

  1. 初始化反向数组int[] reverse = new int[number.length];
  2. System.out.print(result); 会给你结果数组的地址。您必须显示数组的元素。

    int[] result = new int[numbers.length];
    result = rev.revCalculator(numbers);
    
    // shows the result
    // -----------------------------------------
    System.out.println("THE REVERSE WOULD BE: ");
    //System.out.print(result);
    for(int i = 0 ; i<result.length; i++)
        System.out.println(result[i]);
    

希望这会有所帮助。

【讨论】:

  • 非常感谢....在发现无法直接打印出数组的元素后,我编辑了代码 ;))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2021-04-28
  • 1970-01-01
  • 2012-06-17
相关资源
最近更新 更多