字母序列相邻对统计问题:Java代码输出异常求助
排查你的Java代码统计相邻字符对问题
首先,咱们先明确问题核心:要统计字符串中相邻字符对里右侧字符是左侧字符字母表后一位的数量。对于输入abegh,正确的符合条件的对是ab和gh,所以结果应该是2,而你的代码输出1,大概率是循环逻辑或者计数逻辑出了问题。
常见错误点分析
我先列几个最可能导致这个问题的原因:
- 循环范围不正确
比如你的循环只遍历到了字符串的倒数第二个字符之前,漏掉了最后一组相邻对。举个例子,如果字符串长度是5,我们需要检查索引0&1、1&2、2&3、3&4这4组。如果你的循环条件写的是for(int i=0; i < s.length()-2; i++),那只会检查前3组,漏掉了3&4(也就是gh这一组),这样结果就会少1,刚好对应你遇到的情况。 - 字符比较逻辑写反
比如你写成了s.charAt(i) - s.charAt(i+1) == 1,这其实是在判断左侧字符是右侧的后一位,和需求完全相反。不过这种情况会导致ab不被计数,gh也不被计数,结果会是0,不太符合你的输出,但还是值得检查一下。 - 计数变量初始化错误
如果你把计数变量C初始化成了1而不是0,那在没有符合条件的情况下会错误输出1,但如果有一个符合条件的就会输出2,不过你的情况是正确应该2,输出1,所以这个可能性较低,但也可以排查。
正确的代码示例
这里给你一份可以正确运行的代码,你可以对比自己的代码找差异:
import java.util.Scanner; public class AdjacentCharCounter { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine().trim(); int count = 0; // 遍历到倒数第二个字符即可,因为要和下一个字符比较 for (int i = 0; i < s.length() - 1; i++) { char current = s.charAt(i); char next = s.charAt(i + 1); // 判断右侧字符是否是左侧的后一位 if (next - current == 1) { count++; } } System.out.println(count); } }
测试输入abegh时,这个代码会输出2;输入abcdef时输出5,完全符合需求。
排查步骤建议
- 先检查你的循环条件:是不是
i < s.length() - 1?如果不是,改成这个试试。 - 检查字符比较的逻辑:是不是
next - current == 1,而不是反过来? - 检查计数变量的初始值:是不是从0开始?
你可以把自己的代码贴出来,我能更精准地帮你定位问题,但按照上面的步骤,大概率能找到错误所在。
内容的提问来源于stack exchange,提问作者karthik kurella
相关产品推荐
相关产品推荐

