我正在练习阵列,我不确定甚至问什么是问题。
完成名为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];
}
}
答案 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;
}
}
}
希望这有助于``