在此功能中:
public float cgRatio(String dna) {
//initialize count to be 0
int count = 0;
//for each character in the string
//if character == 'C' or 'G' increment count
for (int i = 0; i < dna.length(); i++) {
char c = dna.charAt(i);
if (c == 'C' || c == 'G') {
count++;
}
}
//return the ratio of C & G in DNA strand
return count/dna.length();
}
使用我的测试功能:
public void testFindGene() {
String[] dnaStrands = new String[6];
dnaStrands[0] = "AGCATGGTAACCAATAAGCGTTAAGCCAT";
dnaStrands[1] = "AATAATGGCATGGCCAATGAATGCGTAACCGATTAA";
dnaStrands[2] = "ATAATGCGGAATTGACATGGTA";
dnaStrands[3] = "AGCATGGTAACCAATTAGCGTTAAGCCAT";
dnaStrands[4] = "AATAATGGCATGGCCAATGAATTGACGTAACCGATTAA";
dnaStrands[5] = "ATAATGCGGAATCTAGACATGGTA";
for (int i = 0; i < dnaStrands.length - 1; i++) {
String gene = findGene(dnaStrands[i], 0);
System.out.println("The DNA strand is: \"" + dnaStrands[i] + "\"");
System.out.println("Gene: " + gene);
System.out.println("CG ratio of gene sequence is: " + String.format("%.02f", cgRatio(gene)));
}
}
我的cgRatio返回值始终为0.00。如果我只返回计数,我会以浮点数的形式得到准确的结果。所以这意味着我的cgRatio函数在这一行失败了:
//return the ratio of C & G in DNA strand
return count/dna.length();
你能不能用Java返回一个分数?如果可以,我该如何解决这个问题?如果你不能,为什么以及什么是替代解决方案?
答案 0 :(得分:3)
尝试做,
return (float)count/dna.length();
计数和长度都是int,这就是为什么你会这样。
答案 1 :(得分:2)
将计数声明为浮点数也可以解决问题。整数除法产生一个整数并省略分数。
float count = 0;
答案 2 :(得分:1)
在划分return (double)count/(double)dna.length();
之前转换变量.Java正在整数除法,因为它们都是整数。
答案 3 :(得分:1)
有关实际发生情况的更多说明,请参阅
return count/dna.length();
正在进行整数数学然后将结果转换为浮点数。
例如,如果count为5且dna.length()返回7,则
5/7 = 0.714,在进行整数运算时等于0(向下舍入到最接近的整数值)。
所以你的代码实际上是在执行float(0),它得到0.00的结果。