Как получить минимальное и максимальное количество символов из строки?

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

A1Адепт

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

A 
CC 
AATA 
GGG
TTT
end

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

Счетчик A: 4
Счетчик C: 2
Счетчик G: 3
Счетчик T: 4
Низкий счет A: A
Высокий счет A: AATA
Низкий счет C: CC< br> Высокое количество C: CC
Низкое количество G: GGG
Высокое количество G: GGG
Низкое количество T: AATA
Высокое количество T: TTT

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

person user3212766    schedule 21.01.2014    source источник
comment
@DavidWallace Да, теперь я понял...   -  person Stefano Sanfilippo    schedule 22.01.2014
comment
Поскольку это школьный проект, я думаю, вам следует постараться и достичь цели самостоятельно. Но вот совет: сохраняйте номер A текущей строки и саму текущую строку в двух переменных; если в следующей строке больше A, чем вы поместили в переменную, то обновите. То же самое и с другими буквами.   -  person Stefano Sanfilippo    schedule 22.01.2014


Ответы (2)


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

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

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

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

Однако я не собираюсь писать ваш код за вас. Stack Overflow не платит мне достаточно.

person Dawood ibn Kareem    schedule 21.01.2014

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

person Alex Goja    schedule 21.01.2014
comment
Это хорошо, но решает только часть проблемы. Нам также нужно знать текст строки с наибольшим и наименьшим количеством каждой буквы. - person Dawood ibn Kareem; 22.01.2014
comment
что, если мы увеличим размер processArr на 2 с тем же форматом, чтобы вместо processArr с индексами от 0 до 4 мы получили от 0 до 6. Я объясню почему, надеюсь, это будет иметь смысл. Поэтому мы используем переменные indexOfMaxOccurence и numberOfMaxOccurence. Мы делаем предположение, что в записи 5 processArr мы будем хранить indexOfMaxOccurrence (который будет между 0 и 4), а в записи 6 мы сохраним numberOfMaxOccurrences. Теперь у нас есть как numberOfMaxOccurrences, так и индекс, в котором произошло numberOfMaxOccurrences, который можно использовать для получения текста. - person Alex Goja; 24.01.2014