2017-11-22 4 views
0

Ich versuche this zu verwenden, um nur einen Teil eines Arrays auszudrucken. Mein Array ist 5 Elemente lang - {6, 4, 2, 6, 2} - und ich möchte nur {6, 4, 2, 6, 2} drucken. Aber mit meinem aktuellen Code wird [4, 2, 6, 2] ausgedruckt - Index 1 bis 4, nicht Index 0 bis 3. Warum könnte das passieren?Falsche Indexe von Array zurückgeben

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)); 

Vielen Dank!

EDIT: Dies scheint sogar ein Problem mit den Arrays in meinem Projekt, die auch vollständig gedruckt werden soll. Soll ich mehr von meinem Code veröffentlichen?

Antwort

1

Sie scheinen Ihre Zähler falsch einzustellen. Für das 'A' Zeichen passen Sie den Zähler überhaupt nicht an. Bei Index 0 (dem ersten Array-Element) zählen Sie das Zeichen "C" usw. bis nur noch Index 3 (das vierte Element). Dies lässt das letzte Element undefiniert.

Ich glaube, Sie Ihren Code wollen, dies ähneln:

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)); 
+0

Oh yeah, ich habe gerade diesen 'counter [] ++' Teil für '' A '' weggelassen. Danke, dass du das unterstrichen hast! –

+0

@incapacitated: Ich denke, Sie müssen auch Arrays.copyOfRange (Zähler, 0, 4) zu Arrays.copyOfRange (Zähler, 0, 5) ändern – Zenith

1

Sie die Anweisung verpassten innerhalb wenn Block.

Sie müssen auch die Arrays.copyOfRange ändern (Zähler, 0, 4) zu Arrays.copyOfRange (Zähler, 0, 5) Ihr Code die unten sein sollte.

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)); 

Für das obige Codeergebnis ist Nuc. Anzahl: [6, 4, 2, 6, 2]