Возвращение неверных индексов массива

Я пытаюсь использовать это, чтобы распечатать только часть массива. Мой массив состоит из 5 элементов - {6, 4, 2, 6, 2} - и я хотел бы просто напечатать {6, 4, 2, 6, 2}, Но используя мой текущий код, он распечатывает [4, 2, 6, 2] - индексы с 1 по 4, а не индексы с 0 по 3. Почему это может происходить?

String nucList = CCATT-AATGATCA-CAGTT
int[] counter = new int[5];
for (int i = 0; i < nucList.length(); i++) {
    if (nucList.charAt(i) == 'A') {
    } else if (nucList.charAt(i) == 'C') {
        counter[0]++;
    } else if (nucList.charAt(i) == 'G') {
        counter[1]++;
    } else if (nucList.charAt(i) == 'T') {
        counter[2]++;
    } else if (nucList.charAt(i) == '-') {
        counter[3]++;
    }
int[] counterNucs = Arrays.copyOfRange(counter, 0,  4);
filePrint.println("Nuc. Counts: " + Arrays.toString(counterNucs));

Спасибо!

РЕДАКТИРОВАТЬ: Кажется, это даже проблема с массивами в моем проекте, которые также должны печатать полностью. Должен ли я опубликовать больше моего кода?

2 ответа

Решение

Вы, кажется, неправильно настраиваете свои счетчики. Для символа "А" вы вообще не настраиваете счетчик. При индексе 0 (первый элемент массива) вы считаете символ "C" и так далее, пока не получите только индекс 3 (четвертый элемент). Это оставляет последний элемент неопределенным.

Я считаю, что вы хотите, чтобы ваш код был похож на это:

String nucList = CCATT-AATGATCA-CAGTT
int[] counter = new int[5];
for (int i = 0; i < nucList.length(); i++) {
    if (nucList.charAt(i) == 'A') {
        counter[0]++;
    } else if (nucList.charAt(i) == 'C') {
        counter[1]++;
    } else if (nucList.charAt(i) == 'G') {
        counter[2]++;
    } else if (nucList.charAt(i) == 'T') {
        counter[3]++;
    } else if (nucList.charAt(i) == '-') {
        counter[4]++;
    }
int[] counterNucs = Arrays.copyOfRange(counter, 0,  4);
filePrint.println("Nuc. Counts: " + Arrays.toString(counterNucs));

Вы пропустили утверждение внутри блока if.

Вы также должны изменить Arrays.copyOfRange(counter, 0, 4) на Arrays.copyOfRange(counter, 0, 5). Ваш код должен быть ниже.

String nucList = "CCATT-AATGATCA-CAGTT";
    int[] counter = new int[5];
    for (int i = 0; i < nucList.length(); i++) {
        if (nucList.charAt(i) == 'A') {
            counter[0]++;
        } else if (nucList.charAt(i) == 'C') {
            counter[1]++;
        } else if (nucList.charAt(i) == 'G') {
            counter[2]++;
        } else if (nucList.charAt(i) == 'T') {
            counter[3]++;
        } else if (nucList.charAt(i) == '-') {
            counter[4]++;
        }
    }
    int[] counterNucs = Arrays.copyOfRange(counter, 0, 5);
    System.out.println("Nuc. Counts: " + Arrays.toString(counterNucs));

Для приведенного выше кода результатом является Nuc. Считает: [6, 4, 2, 6, 2]

Другие вопросы по тегам