2014-01-21 4 views
0

Так что у меня возникли проблемы со второй частью этого проекта. У меня есть код ниже, который дает подсчеты для каждой записи, но я не знаю, как получить максимумы и минимумы ... Спасибо заранее!Как получить низкий и высокий счет символов из строки?

A1Adept

Эта программа должна обрабатывать входные данные как A1Novice делает, но в дополнение к производству отсчеты, он должен также отслеживать нити ДНК с наименьшим и наибольшим количеством каждого из нуклеотидных и печати тех, нити к выходу. Таким образом, учитывая следующий входной сигнал:

A 
CC 
AATA 
GGG 
TTT 
end 

Программа должна обеспечить следующий вывод:

Подсчет: 4
Количество С: 2
G Количество: 3
Т Количество: 4
Low отсчет: A
High отсчету: AATA
низкое количество C: CC
Привет GH C Количество: CC
низкое количество G: GGG
High G Количество: GGG
низкое количество T: AATA
Количество High T: ТТТ

package a1; 

import java.util.Scanner; 

public class A1Novice { 
    public static void main(String[] args){ 
     Scanner s = new Scanner(System.in); 
     System.out.println("Enter nucleobases: (enter end when done)"); 
     process(s); 
    } 

    public static void process(Scanner s){ 
     int a = 0, c = 0, g = 0, t = 0; 
     while(s.hasNext()){ 
      String id = s.next(); 
      if(id.equalsIgnoreCase("end")){ 
       break; 
      } 
      for(int i = 0; i < id.length(); i++){ 
       char singleChar = id.charAt(i); 
       if (singleChar=='A' || singleChar=='a'){ 
        a++; 
       } 
       else if(singleChar=='C' || singleChar=='c'){ 
        c++; 
       } 
       else if(singleChar=='G' || singleChar=='g'){ 
        g++; 
       } 
       else if(singleChar=='T' || singleChar=='t'){ 
        t++; 
       } 

      } 
     } 
     System.out.println("A count: " + a); 
     System.out.println("C count: " + c); 
     System.out.println("G count: " + g); 
     System.out.println("T count: " + t); 
    } 
} 
+0

@DavidWallace Да, я понял это сейчас ... –

+0

Так как это школьный проект, я думаю, вам стоит больше стараться и выполнить цель самостоятельно. Но вот подсказка: держите число 'A' текущей строки и текущей строки в двух переменных; если следующая строка имеет больше 'A', чем то, что вы указали в переменной, а затем обновите. То же самое для других букв. –

ответ

0

Что вы могли бы сделать, это написать класс который хранит данные только для одного из четырех оснований -

  • буква, которая представляет собой ту базу,
  • общее количество до сих пор,
  • линия, которая до сих пор имеет наибольшее количество этой базы (и что это за номер)
  • линия, которая пока имеет наименьшее количество этой базы (и что это за номер).

Проинсталлировать четыре из них (вы захотите передать письмо в конструкторе).

Затем напишите метод в этом классе, который берет строку текста в качестве параметра и обновляет все поля класса в соответствии с этой строкой. Вам также понадобятся некоторые методы для отображения полей класса. Наконец, у вас есть вложенные петли в вашем методе main (или какой-либо другой метод), который передает каждую строку текста каждому из объектов по очереди.

Я не собираюсь писать ваш код для вас. Переполнение стека не достаточно мне платят.

0

Я мог бы переусердствовать, но здесь я иду. Моя первоначальная мысль заключалась в том, чтобы хранить каждую строку ввода в списке массивов, используя hasNextLine() вместо hasNext(). Таким образом, вы получите массив ArrayList arrInput со следующим содержимым = {"A", "CC", "AATA", "GGG", "TTT"}. Теперь вы создаете массив, скажем, processArray, который имеет тот же размер для вашего arrInput. Каждая запись processArray имеет другой массив длиной 4 (предполагая, что во входном сигнале могут быть только буквы A, C, T, G), которые будут хранить номера A, C, T или G для каждой строки ввода. Я прикрепил графическое представление концепции, но снова, как я уже говорил, я думаю, что я переусердствовал.enter image description here

+0

Это хорошо, но это решает только часть проблемы. Нам также нужно знать текст строки с наибольшим и наименьшим числом каждой буквы. –

+0

Что делать, если мы увеличиваем размер processArr на 2 с тем же самым форматом, поэтому вместо того, чтобы иметь processArr с индексами от 0 до 4, мы имеем от 0 до 6. Я объясню, почему, надеюсь, это будет иметь смысл. Поэтому мы используем переменную indexOfMaxOccurence и numberOfMaxOccurence. Мы исходим из предположения, что во входе 5 процессаArr мы будем хранить indexOfMaxOccurrence (который будет от 0 до 4), а в записи 6 мы сохраняем числоOfMaxOccurrences. Теперь у нас есть как numberOfMaxOccurrences, так и индекс, в котором произошло числоOfMaxOccurrences, которое может быть использовано для получения текста. –

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