【问题标题】:how to add char values to char array in java如何在java中将char值添加到char数组
【发布时间】:2020-10-26 16:36:00
【问题描述】:

我正在尝试将 char 的补码结果放入 char 数组补码 1。我以为我可以使用运算符,但这仅适用于字符串,但我很难弄清楚如何将每个字母放入数组中,以便显示结果。任何帮助都会非常感谢。

    public static char[] complement(char[] dna) {
        
        char[] complement1 = new char[17];
        
        char comp = '\0';
        
        for (char i = 0; i < dna.length; i++)
            if (dna[i] == 'A') {
                comp = 'T';
            } else if (dna[i] == 'T') {
                comp = 'A';
            } else if (dna[i] == 'G') {
                comp = 'C';
            } else if (dna[i] == 'C') {
                comp = 'G';
                
            } else {
                return null;
            }
        
        for (char c : dna)
            return complement1;
        return complement1;
        
    }
    
    public static void main(String[] args) {
        String testData1 = "GCCTGTCGTAGCTTATC",
                testData2 = "GGCTGACGTAGCGTAAC";
        System.out.printf("%s <-- complement --> %s%n", testData1,
                complement(testData1));
        // int[] baseCounts = nucleotideCounts(testData1);
        // System.out.printf("Nucleotide counts for %s: A: %d C: %d G: %d T: %d%n",
        // testData1, baseCounts[0],
        // baseCounts[1], baseCounts[2], baseCounts[3]);
        
        System.out.printf("%s <-- reverse complement --> %s%n",
                testData1, reverseComplement(testData1));
        System.out.printf("%s GC-content: %f%n", testData1,
                gcContent(testData1));
        System.out.printf("Hamming distance between %s and %s: %d%n",
                testData1, testData2,
                hammingDistance(testData1, testData2));
        // System.out.printf("Mutation points between %s and %s:%n%s%n", testData1,
        // testData2,
        // Arrays.toString(mutationPoints(testData1, testData2))); */
    }
}

【问题讨论】:

  • 你的最后一个 forloop 没有意义。要将字母分配给数组,请执行dna[i] = 'A',其中i 是索引,不能超过数组的length-1
  • 您所做的只是反复更改comp 变量。您永远不会将其设置为 complement1 数组中的值。
  • 您不能真正“添加”到数组中。将值设置为complement1[0] = 'c' 中的数组会更正确。但在你的情况下,如果你只是使用现有的 String 运算符构建你的字符串,然后在最后调用你的 String 上的 toCharArray() 方法将其转换为 char 数组,它可能会更简单
  • 我把它改成了一个字符串,这让它更容易了,谢谢哦上帝蜘蛛

标签: java arrays char


【解决方案1】:

代码可以通过使用switch 语句进行核苷酸映射来简化。

还固定complement的长度与输入dna的长度相同,如果输入无效则抛出运行时异常。

public static String complement(String dna) {
    
    final int n = dna.length();
    char[] complement = new char[n];
        
    for (int i = 0; i < n; i++) {
        char comp = '\0';
        switch (dna.charAt(i)) {
            case 'A': comp = 'T'; break;
            case 'T': comp = 'A'; break;
            case 'G': comp = 'C'; break;
            case 'C': comp = 'G'; break;
            default:
                throw new IllegalArgumentException("Invalid nucleotide detected at " + i + ": " + dna.charAt(i) + " in DNA: " + dna);
        }
        complement[i] = comp;
    }
    return new String(complement);
}

测试

String testData1 = "GCCTGTCGTAGCTTATC",
       testData2 = "GGCTGACGTAGCGTAAC";
System.out.printf("%s <-- complement --> %s%n", testData1, complement(testData1));
System.out.printf("%s <-- complement --> %s%n", testData2, complement(testData2));

输出:

GCCTGTCGTAGCTTATC <-- complement --> CGGACAGCATCGAATAG
GGCTGACGTAGCGTAAC <-- complement --> CCGACTGCATCGCATTG

【讨论】:

    猜你喜欢
    • 2016-03-07
    • 1970-01-01
    • 2023-03-25
    • 2012-11-17
    • 1970-01-01
    • 2017-03-21
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多