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
相关产品推荐
相关产品推荐

