【问题标题】:Trying to increment counter using character comparison尝试使用字符比较来增加计数器
【发布时间】:2019-05-08 18:19:25
【问题描述】:

我正在编写一个方法,该方法应该在每次找到字母c 时遍历一个字符串并增加一个计数器。该方法使用计数来计算字符串为c 的比例。我添加了打印语句来调查为什么它错误地返回 0.0 以获取包含一些 c 的字符串。

我曾尝试将计数器声明为 int,然后稍后将其转换为 double,但这没有帮助。

public double cRatio() {
        String dna = "ATCCCCCCGTACCTAGCAA";
        double cCount = 0.0;
        for (int i = 0; i < dna.length(); i++) {
            char ch = dna.charAt(i);
            if (ch == 'c') {cCount++;}
        }
        System.out.println("C Count is : " + cCount);
        System.out.println("dna.length() is : " + dna.length());

        double cgRatio = (cCount / dna.length());
        System.out.println("C Ratio is : " + cgRatio);
        return cgRatio;
    }

我希望计数器在打印时的值为 9.0,但实际上是 0.0。

【问题讨论】:

  • ch == 'C'输出为0.47368421052631576
  • 输出是正确的,因为您只计算小写字符'c'。如果您想同时计算两者,则可以将 ch 转换为小写并计数。 if (Character.toLowerCase(ch) == 'c') 使用这个 if 条件,无论大小写如何,它都应该起作用

标签: java string charat


【解决方案1】:

您的代码不计算字母 c,因为您正在检查字母 Csmall c 不等于 upper C(不同的 ASCII code)。

if (ch == 'C') {cCount++;}

这将解决您的问题。

【讨论】:

  • 你也可以使用 if(ch.toUpperCase().equals('C') {cCounter++;} 使其不区分大小写
  • 谢谢。那很愚蠢。此方法是一个更大程序的一部分,该程序在处理输入的早期将所有输入转换为小写。单独测试此方法时,对 .toLowerCase 的调用超出了测试范围。
猜你喜欢
  • 2016-07-18
  • 2017-06-29
  • 2020-10-19
  • 2010-12-21
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2014-05-30
相关资源
最近更新 更多