【问题标题】:How to get the low and high counts of characters from a string?如何从字符串中获取低和高字符数?
【发布时间】:2014-02-11 17:39:58
【问题描述】:

所以我在这个项目的第二部分遇到了麻烦。我有下面的代码,它为每个条目提供计数,但我不知道如何获得高点和低点......提前致谢!

A1熟练

这个程序应该像 A1Novice 一样处理输入,但除了产生计数之外,它还应该跟踪每个核碱基中具有最小和最大数量的 DNA 链,并将这些链打印到输出。因此,给定以下输入:

A 
CC 
AATA 
GGG
TTT
end

程序应产生以下输出:

计数:4
C 数:2
克数:3
T 数:4
低A计数:A
高A计数:AATA
低 C 计数:CC
高 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);
    }
}

【问题讨论】:

  • @DavidWallace 是的,我现在想通了……
  • 既然是学校项目,我认为你应该更加努力,自己完成目标。但是这里有个小技巧:把当前字符串的A的个数和当前字符串本身保存在两个变量中;如果下一个字符串的 A 比您放入变量中的更多,则更新。其他字母也一样。

标签: java arrays java.util.scanner next dna-sequence


【解决方案1】:

你可以做的是编写一个类来存储四个基之一的数据 -

  • 代表该基础的字母,
  • 到目前为止的总数,
  • 到目前为止,该基数最多的行(以及该数字是多少)
  • 到目前为止,该基数最少的行(以及该基数是多少)。

实例化其中的四个(您需要在构造函数中传递字母)。

然后在该类中编写一个方法,以一行文本作为参数,并根据该行更新该类的所有字段。您还需要一些方法来显示类的字段。最后,在 main 方法(或其他方法)中嵌套循环,将每行文本依次传递给每个对象。

不过,我不会为您编写代码。 Stack Overflow 没有给我足够的报酬。

【讨论】:

    【解决方案2】:

    我可能想多了,但我走了。我最初的想法是使用 hasNextLine() 而不是 hasNext() 将每一行输入存储到一个数组列表中。这样,您最终会得到一个数组 ArrayList arrInput,其中包含以下内容 = {"A","CC","AATA","GGG","TTT"}。现在您创建一个数组,假设 processArray 与您的 arrInput 具有相同的大小。 processArray 的每个条目都有另一个长度为 4 的数组(假设输入中只能出现字母 A、C、T、G),它将存储每行输入的 A、C、T 或 G 的数量。我附上了这个概念的图形表示,但就像我之前所说的那样,我认为我想多了。

    【讨论】:

    • 这很好,但只能解决部分问题。我们还需要知道每个字母数量最多和最少的行的文本。
    • 如果我们以相同的格式将 processArr 的大小扩展 2 会怎样,所以我们没有索引从 0 到 4 的 processArr,而是从 0 到 6。我会解释为什么,我希望它会有意义。所以我们使用变量 indexOfMaxOccurence 和 numberOfMaxOccurence。我们假设在 processArr 的条目 5 中我们将存储 indexOfMaxOccurrence(介于 0 到 4 之间),在条目 6 中我们存储 numberOfMaxOccurrence。现在我们有 numberOfMaxOccurrences 和 numberOfMaxOccurrences 出现的索引,可用于获取文本。
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多