我正在训练代码战争片,而片是:

在工厂中,打印机会打印盒子的标签。对于一种盒子,打印机必须使用颜色,为简单起见,用从a到m的字母命名。

打印机使用的颜色记录在控制字符串中。例如,“好”控制字符串将为aaabbbbhaijjjm,这意味着打印机使用了三种颜色a,四种颜色b,一种颜色h然后一种颜色a ...

有时会出现问题:颜色不足,技术故障以及产生“不良”控制字串,例如aaaxbbbbyyhwawiwjjjwwm的字母不是从a到m。

您必须编写一个函数printer_error,给定一个字符串,它将以表示字符串的字符串形式输出打印机的错误率,该字符串的分子是错误数量,而分母是控制字符串的长度。不要将此分数简化为一个更简单的表达式。

该字符串的长度大于或等于1,并且仅包含从a到z的字母。

例子:

s="aaabbbbhaijjjm"
error_printer(s) => "0/14"

s="aaaxbbbbyyhwawiwjjjwwm"
error_printer(s) => "8/22"


作为一个新手,我试图尝试一下。我的程序是这样的:

public class Printer {

    public static String printerError(String s) {
      int printErr = 0;
      char end = 110;
      int i = 0;
        while (i < s.length()){
          if(s.charAt(i) > end ){
          printErr++;
          }
          i++;
        }
        String rate = String.format("%d/%d",printErr , s.length());
        return rate;
    }
}



它通过了测试,但是在提交Kata时,计数器缺少1或2个数字。有人可以帮忙吗?

最佳答案

实际上,您可以仅使用<>来检查字符是否在Java中。您的逻辑是合理的-但由于您是“新手”,因此已使用while循环重新创建了for循环的功能。无需这样做-这就是为什么我们有for循环的原因。

请参阅下面的调整方法:

    public String printerError(String s) {
        int printErr = 0;

        for (int i = 0; i < s.length(); i++) {
            // assuming the input rules hold true, we really only need the second condition
            if (s.charAt(i) < 'a' || s.charAt(i) > 'm') {
                printErr++;
            }
        }

        return String.format("%d/%d", printErr, s.length());
    }

08-26 06:46