为何调用sentenceReversal方法时传变量与直接传字符串结果不同?
问题原因及解决办法
1. 输入带空格字符串仅返回第一个单词的原因
你用scan.next()读取输入时,这个方法会以空格作为分隔符,只读取到第一个空格前的内容。比如输入Hello World,input6实际只拿到Hello,没有空格字符,触发递归方法的base case(x == -1),直接返回原字符串,最终输出Hello。
2. InputMismatchException及输入数字后剩余内容出现的原因
这是Scanner的输入处理机制导致的:
- 如果之前使用过
nextInt()、nextDouble()这类读取基本数据类型的方法,它们只会读取数字部分,不会处理输入末尾的换行符(\n)。 - 后续调用
nextLine()时,会直接读取残留的换行符,导致拿到空字符串;如果后续用next(),则会跳过换行符读取下一个单词,但如果输入内容和预期类型不匹配(比如用nextInt()时输入字符串),就会抛出InputMismatchException。
解决办法
- 读取含空格的整行输入:把
scan.next()替换成scan.nextLine(),就能获取包含空格的完整输入字符串。 - 处理残留换行符:如果在调用
nextLine()之前用过nextInt()等方法,需要先额外调用一次scan.nextLine()消耗残留的换行符,避免读取空内容。
修改后的case 6代码示例:
case 6: System.out.println("Enter a string to reverse:"); // 若之前有nextInt()等操作,添加此行:scan.nextLine(); String input6 = scan.nextLine(); System.out.println(sentenceReversal(input6)); break;
内容的提问来源于stack exchange,提问作者Robert Beletsky
相关产品推荐
相关产品推荐

