返回错误的数组索引

时间:2017-11-22 04:25:24

标签: java arrays string printstream

我正在尝试使用this仅打印出数组的一部分。我的数组长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 :(得分:1)

您似乎错误地调整了计数器。对于'A'字符,您根本没有调整计数器。在索引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));

答案 1 :(得分:1)

你错过了 if block 中的声明。

您还必须将 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]