有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我只需要使用循环替换数组中的字符。我不能做比这更高级的事了。我该怎么办?

我正在研究一个人造DNA链分析仪,我需要创建这个的互补链:

char [] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};

注意:如果有帮助的话,这是20个字符

我不能硬编码,我需要使用一个循环来迭代每个字符,并找出如何将a与t(反之亦然)交换,将G与C(反之亦然)交换


共 (3) 个答案

  1. # 1 楼答案

    Jimmyv代码: 更好

    char[] complementstrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
        for (int i = 0; i < complementstrand.length; i++) {
    
        if (Character.toString(complementstrand[i]).equals("A")){
    complementstrand[i] = "T".charAt(0);
    }
    
        else if (Character.toString(complementstrand[i]).equals("T")){
    complementstrand[i] = "A".charAt(0);
    }
    
    
        else if (Character.toString(complementstrand[i]).equals("G")){
    complementstrand[i] = "C".charAt(0);
    }
    
    
        else if (Character.toString(complementstrand[i]).equals("C")){
    complementstrand[i] = "G".charAt(0);
    }
    
    
    }
    System.out.println(Arrays.toString(complementstrand));
    
  2. # 2 楼答案

    最简单的解决方案:

    char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
    char[] newTestStrand = new char[testStrand.length];
    for (int i = 0, l = testStrand.length; i < l; i++)
    {
       if (testStrand[i] == 'A')
       {
          newTestStrand[i] = 'T';
       }
       else if (testStrand[i] == 'T')
       {
          newTestStrand[i] = 'A';
       }
       else if (testStrand[i] == 'C')
       {
          newTestStrand[i] = 'G';
       }
       else if (testStrand[i] == 'G')
       {
          newTestStrand[i] = 'C';
       }
       else
       {
          newTestStrand[i] = testStrand[i];
       }
    }
    

    或者使用switch语句(不确定是否允许使用该语句):

    char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
    char[] newTestStrand = new char[testStrand.length];
    for (int i = 0, l = testStrand.length; i < l; i++)
    {
       switch (testStrand[i])
       {
          case 'A':
            newTestStrand[i] = 'T';
            break;
          case 'T':
            newTestStrand[i] = 'A';
            break;
          case 'G':
            newTestStrand[i] = 'C';
            break;
          case 'C':
            newTestStrand[i] = 'G';
            break;
          default:
            newTestStrand[i] = testStrand[i];
            break;
        }
    }
    

    但在现实中,我建议以某种方式表示交换(键值对),并在潜在交换中循环。我坚持用简单的解决方案,因为你说的是“只循环”

  3. # 3 楼答案

    因为有人已经提出了else/if方法,这里是相同的,但使用了三元运算符:

    char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
    for (int i = 0; i < testStrand.length; i++) {
        testStrand[i] = testStrand[i] == 'A' ? 'T' :
            testStrand[i] == 'T' ? 'A' :
                testStrand[i] == 'G' ? 'C' :
                    testStrand[i] == 'C' ? 'G' : testStrand[i];
    }
    

    更新

    我注意到您询问如何在不同的数组中插入新值:

    char[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
    char[] reversed = new char[testStrand.length];
    
    for (int i = 0; i < testStrand.length; i++) {
        if (testStrand[i] == 'A') {
            reversed[i] = 'T';
        } else if (testStrand[i] == 'T') {
            reversed[i] = 'A';
        } else if (testStrand[i] == 'C') {
            reversed[i] = 'G';
        } else if (testStrand[i] == 'G') {
            reversed[i] = 'C';
        } else {
            reversed[i] = testStrand[i];
        }
    }
    

    更新2

    但是,如果你感到狂野:

    Character[] testStrand = {'A', 'T', 'T', 'A', 'G', 'C', 'T', 'A', 'T', 'G', 'A', 'A', 'C', 'C', 'T', 'A', 'C', 'C', 'A', 'T'};
    List<Character> chars = Arrays.asList(testStrand);
    chars.replaceAll(c -> {
        switch (c) {
            case 'A': return 'T';
            case 'T': return 'A';
            case 'C': return 'G';
            case 'G': return 'C';
            default: return c;
        }
    });
    
    // print them out
    chars.forEach(System.out::println);