2016-11-04 3 views
-1

ich alle anderen Zeichen ignoriert werden soll neben A, G, T, C, aber wenn ich N am Ende der Zeichenfolge setzen, es druckt 00. die Ausgabe 00 sein sollte 0101 1010 1111, aber es ist 00 0101 1010 1111 00. ich den Standardfall in der switch-Anweisung verwendet, weil ich dachte, das alle anderen Zeichen als die aufgelisteten ignorieren würde. Gibt es etwas, was ich falsch mache?java switch-Anweisung nicht die Fälle zu ignorieren nicht aufgelistet

import java.util.BitSet; 

public class Main { 

    public static void main(String[] args){ 

     String originalString = "aCCGGAATTN"; 
     int bitSetSize = 2 * originalString.length(); 
     BitSet bitSet = new BitSet(bitSetSize); 

     originalString = originalString.toUpperCase(); 

     for (int i = 0; i < originalString.length(); i++) { 

      switch(originalString.charAt(i)){ 
      case 'A': 
       bitSet.clear(i * 2); 
       bitSet.clear(i * 2 + 1); 
      break; 

      case 'C': 
       bitSet.clear(i * 2); 
       bitSet.set(i * 2 + 1); 
      break; 

      case 'G': 
       bitSet.set(i * 2); 
       bitSet.clear(i * 2 + 1); 
      break; 

      case 'T': 
       bitSet.set(i * 2); 
       bitSet.set(i * 2 + 1); 
      break; 

      default: 
       break; 

      } 

     } 

     // print all the bits in the bitset 
     for (int i = 0; i < bitSetSize; i++) { 
      if (bitSet.get(i)) 
      System.out.print("1"); 
      else 
      System.out.print("0"); 
     } 
    } 
} 
+0

Haben Sie das Debuggen versucht? Verwenden Sie einen Debugger, um Druckanweisungen zu platzieren, um zu sehen, was passiert. – Carcigenicate

+0

@PaulAbbott das war mein Problem, danke! –

Antwort

0

Es ist das die switch, dass das Problem ist, dann ist es die Tatsache, dass Sie Indizes in Ihren ursprünglichen, ungefilterte Zeichenfolge verwenden, zu entscheiden, welche zu setzen Bits.

Verwenden von zwei verschiedenen Variablen Spur des Eingangs zu halten und die Ausgangs Indizes:

for (int i = 0, j = 0; i < originalString.length(); i++) { 

     switch(originalString.charAt(i)){ 
     case 'A': 
      bitSet.clear(j * 2); 
      bitSet.clear(j * 2 + 1); 
      j++; 
     break; 

     ... 

     } 

    } 
Verwandte Themen