Как я могу получить метод массива, чтобы дать мне правильный вывод? - PullRequest
0 голосов
/ 22 января 2012

Я пытаюсь создать метод, который ожидает массив int и два int S1 и int S2 в качестве параметров.Целые числа представляют начальную позицию и конечную позицию подмассива в массиве параметров.Метод возвращает новый массив, который содержит элементы от начальной позиции до конечной позиции.

Это то, что у меня есть, но оно продолжает давать мне это сообщение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
    at java.lang.System.arraycopy(Native Method)
    at testing.subArray(testing.java:14)
    at testing.main(testing.java:9)

Вот код:

public class testing{

public static void main(String args[])
{
int[] firstArray = {8,9,10,11,12,13};
subArray(firstArray, 2, 4);
}

public static void subArray(int[]originalArray, int S1, int S2)
{
int[] copy = new int[3];
System.arraycopy(originalArray, S1, copy, S2, 2);

for (int i = 0; i < copy.length; i++){
        System.out.println(copy[i]);}
}

}

Помогите пожалуйста!:)

Ответы [ 2 ]

2 голосов
/ 22 января 2012

Метод возвращает новый массив, содержащий элементы от начальной позиции до конечной позиции.

В настоящее время он ничего не возвращает (это метод void),Однако вы можете использовать Arrays.copyOfRange(), если хотите максимально упростить свою работу.

Что касается текущего кода, вот несколько советов:

  1. Почему вы всегда выделяете три элемента для copy?Размер массива должен зависеть от S1 и S2.
  2. Аргументы arraycopy() полностью неверны.Прочтите соответствующую часть документации по Java и выясните, какие правильные значения.
0 голосов
/ 22 января 2012

Вы обнаружите, что это работает намного лучше:

public class testing {

    public static final int DEFAULT_LENGTH = 3;

    public static void main(String args[]) {
        int[] firstArray = {8, 9, 10, 11, 12, 13};
        int [] subArray = createSubArray(firstArray, 2, 4);
        for (int i = 0; i < subArray.length; i++) {
            System.out.println(subArray[i]);
        }
    }

    public static int [] createSubArray(int[] originalArray, int startPosition1, int valuesToCopy) {
        int subArrayLength = Math.min((originalArray.length-startPosition1), valuesToCopy);
        int [] subArray = new int[subArrayLength];
        System.arraycopy(originalArray, startPosition1, subArray, 0, subArrayLength);

        return subArray;
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...