2016-11-30 2 views
0

Мой код вводит определенную пользователем строку и классифицирует ее как ДНК, РНК или ODD. Вывод должен печатать ключи и значения HashMap нуклеотид_hmap, но код в настоящее время этого не делает. Что я должен изменить в своем коде, чтобы он работал?Код Java не печатает Ключи и значения HashMap

Вот то, что код должен вывести: (если последовательность пользователь вводит ATGC)

  • ATGC
  • 1: 0,25
  • T 1: 0,25
  • С 1: 0,25
  • G 1: 0,25
  • Последовательность Длина: 4
  • Обратный порядок: C GTA
  • Reverse дополнение: GCAT

И это одна из моих подклассов:

package sequenceclasses; 

public class DNASequence extends MainSequence { 
    public DNASequence(String dna_sequence){ 
     the_sequence = dna_sequence; 
     complement_hmap.put('A', 'T'); 
     complement_hmap.put('T', 'A'); 
     complement_hmap.put('C', 'G'); 
     complement_hmap.put('G', 'C'); 
    } 
    public void nuc_content(String dna_sequence){ 
     the_sequence = dna_sequence; 
     double[] counts_ratios = new double[8]; 
     for (int i = 0; i < dna_sequence.length(); i++){ 
      if (dna_sequence.charAt(i) == 'A'){ 
       counts_ratios[0] += 1;} 
      if (dna_sequence.charAt(i) == 'T'){ 
       counts_ratios[1] += 1;} 
      if (dna_sequence.charAt(i) == 'C'){ 
       counts_ratios[2] += 1;} 
      if (dna_sequence.charAt(i) == 'G'){ 
       counts_ratios[3] += 1;} 
      } 
      if (dna_sequence.length() > 0){ 
       counts_ratios[4] = counts_ratios[0]/dna_sequence.length(); 
       counts_ratios[5] = counts_ratios[1]/dna_sequence.length(); 
       counts_ratios[6] = counts_ratios[2]/dna_sequence.length(); 
       counts_ratios[7] = counts_ratios[3]/dna_sequence.length(); 
     }  
     String A_content = Double.toString(counts_ratios[0]) + " , " + Double.toString(counts_ratios[4]); 
     String T_content = Double.toString(counts_ratios[1]) + " , " + Double.toString(counts_ratios[5]); 
     String C_content = Double.toString(counts_ratios[2]) + " , " + Double.toString(counts_ratios[6]); 
     String G_content = Double.toString(counts_ratios[3]) + " , " + Double.toString(counts_ratios[7]); 

     nucleotide_hmap.put('A', A_content); 
     nucleotide_hmap.put('T', T_content); 
     nucleotide_hmap.put('C', C_content); 
     nucleotide_hmap.put('G', G_content); 
    } 
} 
+2

Попробуйте указать _minimal_ подмножество кода, которое продемонстрирует ваш вопрос. –

+1

Ну, единственное место, где вы положили что-то на карте, - это метод nuc_content(). Но этот метод никогда не называется нигде. –

+0

Добро пожаловать в переполнение стека! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите нам с некоторыми [дополнительными методами отладки] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Если у вас все еще есть проблемы после этого, пожалуйста, не забудьте вернуться с более подробной информацией. –

ответ

0

Вы никогда не вызвать nuc_content метод в классе DNASequence. Чтобы решить эту проблему, добавьте строку nuc_content(dna_sequence); в класс DNASequence. Конструктор должен теперь выглядеть так:

public DNASequence(String dna_sequence){ 
     the_sequence = dna_sequence; 
     complement_hmap.put('A', 'T'); 
     complement_hmap.put('T', 'A'); 
     complement_hmap.put('C', 'G'); 
     complement_hmap.put('G', 'C'); 
     nuc_content(dna_sequence); 
    } 
+0

Спасибо. Я добавил статическую часть в свой HashMap. Однако печать не работает. Я добавил ключи и значения в мой подкласс, но когда я напечатал размер с помощью 'nucleotide_hmap.size()' в моем методе метода нуклеотидов, он говорит о нуле, когда это должно быть 4. –

+0

@ B.L. Какой класс вы печатаете, и на какой строке? –

+0

Ну, я добавил его в эту строку: 'public void nucleotidecontent (String seq1) { \t \t System.out.println (nucleotide_hmap.size()); \t \t для (Map.Entry запись: nucleotide_hmap.entrySet()) { \t \t \t System.out.println (entry.getKey() + ":" + entry.getValue()); \t \t} \t} ' –

Смежные вопросы