基于传入的整数值加倍数组的大小

时间:2016-09-23 04:39:26

标签: java arrays indexing

我正在练习阵列,我不确定甚至问什么是问题。 完成名为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];
    }
}

5 个答案:

答案 0 :(得分:1)

问题是要求你将int i添加到数字数组中。

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

{1, 5, 7, 9}

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

{1, 5, 7, 9, 11}

但是如果阵列无法容纳您想要添加的数字,那么您需要将其设置得更大,以便它可以容纳新数字。因此,在添加数字11之前,请确保首先在阵列中有空间。如果没有,那么你将数组加倍。

答案 1 :(得分:0)

在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;
}

答案 2 :(得分:0)

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

然后你的代码会有些意义,否则这是一个不合逻辑的问题。

答案 3 :(得分:0)

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

这是总和:

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

这是加倍的:

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

答案 4 :(得分:0)

这样可以正常工作。

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

希望这有助于``