Возвращение неверных индексов массива
Я пытаюсь использовать это, чтобы распечатать только часть массива. Мой массив состоит из 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]