#java #arrays #java.util.scanner
Вопрос:
Я работаю над проектом с массивами. Я использую метод, который добавляет значения в массив размером 20. Предполагается, что я смогу изменять размер массива, одновременно перенося значения из предыдущего массива в новый массив. Я использовал Array.copyOfRange, который должен работать, но по какой-то причине, когда я запускаю код и пытаюсь изменить размер массива. Я получаю сообщение об ошибке, в котором говорится, что индекс выходит за рамки. Может ли кто-нибудь помочь мне понять, почему он так говорит, когда это должно сработать?
import java.util.Scanner;
import java.util.Arrays;
public class IntBag2 {
private static final int INITIAL_SIZE = 20;
private static int[] bag;
private int capacity;
public IntBag2() {
bag = new int[INITIAL_SIZE];
}
public IntBag2(int capacity) {
bag = new int[capacity];
}
public boolean add(int item) {
if (capacity == bag.length)
return false;
bag[capacity ] = item;
return true;
}
public void changeCapacity(int newCapacity) {
bag = Arrays.copyOfRange(bag, 0, newCapacity);
}
@Override
public String toString() {
String result = "Bag: ";
for (int i = 0; i < capacity; i )
result = bag[i] " ";
return resu<
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
IntBag2 intBag = new IntBag2();
boolean done = false;
while (!done) {
System.out.println("1. Add an Item to the Array");
System.out.println("2. Change Length of Array");
System.out.println("3. toString");
switch (input.nextInt()) {
case 1:
System.out.println("Add an Item to the Array");
intBag.add(input.nextInt());
break;
case 2:
System.out.println("Change Length of Array");
intBag.changeCapacity(input.nextInt());
break;
case 3:
System.out.println("toString");
System.out.println(intBag.toString());
break;
}
}
input.close();
}
}
Ответ №1:
Потому что в вашей функции changeCapacity вы не обновляете поле емкости при передаче новой емкости.
public void changeCapacity(int newCapacity) {
bag = Arrays.copyOfRange(bag, 0, newCapacity);
capacity = newCapacity;
}
Просто замените функцию changeCapacity приведенным выше кодом, и она должна работать нормально.