You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中DNA序列字符计数循环计数器无法更新问题求助

DNA序列字符统计计数器不更新的问题修复

你的代码里有三个核心问题导致计数器完全不工作,还暗藏索引越界的风险:

  • 循环边界写错了:i <= dna.length()会让循环跑到i等于字符串长度的位置,但字符串索引是从0到length-1,这会直接抛出StringIndexOutOfBoundsException,得改成i < dna.length()。
  • 拿单个字符的方法错了:dna.substring(i)是从索引i开始取到字符串末尾的整段子串,不是单个字符。要拿单个字符用dna.charAt(i),它返回的是char类型的单个字符。
  • 比较逻辑错了:Java里用==比较字符串是比对象引用,不是内容;而单个字符是基本类型,直接用==和'A'这种字符常量比就行,不用搞字符串比较。

修正后的代码如下:

public class DNA {

  public static void main(String[] args) {
    String dna1 = "ATGCGATACGCTTGA";
    String dna2 = "ATGCGATACGTGA";
    String dna3 = "ATTAATATGTACTGA";
    String dna = dna1;
    int aCount = 0;
    int cCount = 0;
    int tCount = 0;
    int gCount = 0; // 补上G的统计,覆盖所有DNA碱基

    for (int i = 0; i < dna.length(); i++) {
      char current = dna.charAt(i);
      if (current == 'A') {
        aCount++;
      } else if (current == 'C') {
        cCount++;
      } else if (current == 'T') {
        tCount++;
      } else if (current == 'G') {
        gCount++;
      }
    }

    // 循环外统一输出,避免每次循环都打印
    System.out.println("A: " + aCount);
    System.out.println("C: " + cCount);
    System.out.println("T: " + tCount);
    System.out.println("G: " + gCount);
  }
}

另外提一句:Ruby里==是直接比较字符串内容,而且str[i]就能取单个字符,这和Java的语法差异就是你之前Ruby能跑、Java出问题的原因。

内容的提问来源于stack exchange,提问作者Katie-Kat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:20:23