我正在训练代码战争片,而片是:
在工厂中,打印机会打印盒子的标签。对于一种盒子,打印机必须使用颜色,为简单起见,用从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());
}