【问题标题】:Doubling the size of array based on passed in integer value根据传入的整数值将数组的大小加倍
【发布时间】:2016-09-23 04:39:25
【问题描述】:

我正在练习数组,我什至不确定要问什么问题。 完成名为addInt的方法 这只是一个练习代码。 此方法应将传入的整数添加到数组中。如果数组已满,则应将数组的大小加倍,然后将整数添加到数组中。

public class SimpleArrays {
private int[] numbers;
public SimpleArrays(int... nums) {
    numbers = new int[nums.length];
    for (int i = 0; i < nums.length; i++) {
        numbers[i] = nums[i];
    }
}
public void addInt(int i) {
}
public int sum() {
    int sum = 0;
    for (int i : numbers) {
        sum += i;
    }
    return sum;
}
public void doubleSize() {
    int[] doubleArray = new int[numbers.length * 2];
    for (int i = 0; i < numbers.length; i++) {
        doubleArray[i] = numbers[i];
    }
}

【问题讨论】:

  • addInt ,问题是要求您将整数添加到数组中,而不是添加数字。
  • 只需调用doubleSize,然后插入最后一项。
  • “我什至不确定要问什么问题” 在发帖之前,您自己澄清一下您要问的内容会对您有所帮助。否则,请以this.numbers = doubleArray; 声明结束您的public void doubleSize(),然后回来告诉我们为什么需要那个。
  • 抱歉没有正确说明。我不需要更改其他方法中的任何内容,因为它们正在针对测试用例工作。但是我需要在 addInt 方法中添加一些东西。我给出了该方法需要做的事情

标签: java arrays indexing


【解决方案1】:

问题是要求您将 int i 添加到您的 numbers 数组中。

假设 numbers 数组中有 1、5、7、9。它看起来像这样:

{1, 5, 7, 9}

如果您像这样调用 addInt addInt(11); 那么您希望 numbers 数组看起来像这样:

{1, 5, 7, 9, 11}

但是如果数组不能容纳你想添加的数字,那么你需要把它变大,这样它就可以容纳新的数字。因此,在添加数字 11 之前,首先要确保数组中有空间。如果没有,则将数组加倍。

【讨论】:

  • 没错,我不知道如何在这里假设一般情况
【解决方案2】:

在您当前的代码中,没有使用您在本地创建的 doubleArray。 您应该从 douleSize() 方法返回它或将其重新初始化为 numbers 数组。

那么您的代码将是有意义的,否则这是一个不合逻辑的问题。

【讨论】:

    【解决方案3】:

    在您的 doubleSize() 函数的末尾,您应该添加一条语句以确保您的 numbers 变量引用分配给 doubleArray 数组的内存。

    下面的语句应该做到这一点

    numbers = doubleArray;
    

    你的 doubleSize() 应该如下所示

    public void doubleSize() {
        int[] doubleArray = new int[numbers.length * 2];
        for (int i = 0; i < numbers.length; i++) {
            doubleArray[i] = numbers[i];
        }
        numbers = doubleArray;
    }
    

    【讨论】:

    • 谢谢大家。我想通了。一如既往地感谢您的帮助。
    【解决方案4】:

    考虑用更简洁的代码替换您的代码。

    这是总和:

    return IntStream.of(numbers).sum();
    

    这个加倍:

    numbers = Arrays.copyOf(numbers, numbers.length * 2);
    System.arrayCopy(numbers, 0, numbers, numbers.length / 2, numbers.length / 2);
    

    【讨论】:

      【解决方案5】:

      这会很好用。

      public void addInt(int i){
         int size = numbers.length;
         if(numbers[size - 1]!= 0){
             //replace doubleSize(); with the following
              numbers = Arrays.copyOf(numbers, 2 * size );
      
             numbers[size] = i;
         }else{
             for(int j = 0; j<size; j++) {
                if(numbers[j] == 0){
                    numbers[j] = i;
                    break;
                }
         }
      }
      

      或者为了更好的结果,你可以将数组声明改为

      private Integer[] numbers;
      

      并初始化为

      numbers = new Integer[nums.length];
      

      所以上面的代码可以修改为

      public void addInt(int i){
         int size = numbers.length;
         if(numbers[size - 1]!= null){
             //replace doubleSize(); with the following
              numbers = Arrays.copyOf(numbers, 2 * size );
             numbers[size] = i;
         }else{
             for(int j = 0; j<size; j++) {
                if(numbers[j] == null){
                    numbers[j] = i;
                    break;
                }
         }
      }
      

      希望对你有帮助``

      【讨论】:

        猜你喜欢
        • 2014-04-10
        • 1970-01-01
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多