Java程序报错求助:编程1作业连续重复数字检测功能问题
解决Java中找出数字相邻重复两位的问题
嘿,我懂你在《编程1》Java作业里碰到的麻烦了——要从用户输入的数字里找出所有相邻且重复的两位数,而且题目贴心地说明不会有三个连续相同的数字,比如输入133455662要输出356对吧?虽然你没贴完整的报错代码,但我可以先帮你梳理这类需求的常见坑,再给你一个能正常运行的实现,你可以对照自己的代码找找问题~
常见的错误点(你可能踩了这些坑)
- 直接对数字做取模、除法操作拆分每一位:这种方式容易处理不好位数,尤其是数字长度不确定的时候,还可能因为正负号出问题
- 循环边界没处理对:比如遍历到最后一个字符时还去取下一位,直接抛出
StringIndexOutOfBoundsException - 没跳过已处理的重复位:比如碰到
33时连续两次添加3,导致输出结果重复
正确的实现代码
import java.util.Scanner; public class AdjacentDuplicateFinder { public static void main(String[] args) { Scanner inputScanner = new Scanner(System.in); System.out.print("请输入目标数字:"); String numStr = inputScanner.nextLine(); StringBuilder duplicateDigits = new StringBuilder(); // 遍历到倒数第二位即可,避免索引越界 for (int i = 0; i < numStr.length() - 1; i++) { char current = numStr.charAt(i); char nextChar = numStr.charAt(i + 1); if (current == nextChar) { duplicateDigits.append(current); // 跳过下一位,因为题目没有三个连续相同的数字,不用重复检查 i++; } } System.out.println("相邻重复的数字为:" + duplicateDigits.toString()); inputScanner.close(); } }
代码说明
- 把输入转换成字符串处理:字符直接比较比拆分数字简单太多,完全不用考虑数字的长度和正负问题
- 用
StringBuilder拼接结果:比直接用+=拼接字符串效率更高,尤其是输入数字较长的时候 - 循环里的额外
i++:因为题目保证没有三个连续相同的数字,所以碰到重复对之后直接跳过下一位,避免重复添加同一个数字 - 边界控制:
i < numStr.length() - 1确保每次i+1都不会超出字符串的索引范围
你可以把自己的代码和这个版本对比下,看看是不是某个环节没处理好,比如循环边界、字符比较的逻辑,或者输入处理的方式~
内容的提问来源于stack exchange,提问作者BigKidPlayground
相关产品推荐
相关产品推荐

