java - 作为一个新手,我在程序中找不到错误
问题描述
我正在训练代码大战 kata,而 kata 是:
在工厂里,打印机打印盒子的标签。对于一种盒子,打印机必须使用颜色,为简单起见,使用从 a 到 m 的字母命名。
打印机使用的颜色记录在控制字符串中。例如,一个“好”的控制字符串是 aaabbbbhaijjjm,这意味着打印机使用了 3 次颜色 a、4 次颜色 b、1 次颜色 h 和 1 次颜色 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 个数字。任何人都可以帮忙吗?
解决方案
实际上,您可以使用<
and>
来检查字符是否在 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());
}
推荐阅读
- django - 在 Google Cloud Run 中运行 Django 的 createsuperuser
- php - CSV 在使用 PHP 显示 HTML 表之前检查列
- google-app-engine - Betfair Non-Interactive (Bot) 登录在 Google App Engine 区域 eu-west2(伦敦)中不起作用
- spring - Thymeleaf:在html标签上拆分字符串
- java - Spring MVC 控制器请求映射无法正常工作
- google-apps-script - 创建广告并分配创意和展示位置
- python - 使用 Pillow 将绘制的长文本分成多行
- javascript - 如何根据对象属性向渲染图像添加“活动”类?
- ruby - POST(不是 GET)wikidata 查询
- python - 如何在 python 中找到包含 30 只股票的数据集中的年化收益率