2016-11-04 9 views
-1

Я хочу игнорировать все другие символы, кроме A, G, T, C, но когда я поместил N в конец строки, он печатает 00. Выход должен быть 00 0101 1010 1111, , но это 00 0101 1010 1111 00. Я использовал случай по умолчанию в инструкции switch, потому что думал, что это игнорирует все остальные символы, кроме перечисленных. Есть ли что-то, что я делаю неправильно?оператор java switch не игнорирует случаи, которые не указаны

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

вы пробовали отладки? Используйте отладчик, чтобы он размещал заявления печати, чтобы узнать, что происходит. – Carcigenicate

+0

@PaulAbbott это была моя проблема, спасибо! –

ответ

0

Это switch, что это проблема, это тот факт, что вы используете индексы в исходную нефильтрованную строку, чтобы решить, какие биты установлены.

Используйте две различные переменные, чтобы следить за входом и выходных индексов:

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; 

     ... 

     } 

    }