编写递归反转单词的Java程序:代码补全及功能完善问询
修复后的Java递归反转单词程序
我来帮你搞定这个程序的问题,咱们先梳理下原代码里的坑,然后给出完善后的版本:
原代码的问题点
- 第14行编译错误:
input.next()是错误写法,input是String类型,根本没有next()方法,得用你创建的Scanner对象来读取用户的Y/N选择。 - Scanner重复实例化:每次循环都新建Scanner实例,既浪费资源还可能引发输入异常,应该把Scanner的创建移到循环外面。
- 循环条件不严谨:原条件
!tryAgain.equals("N")会让任何非N的输入(比如X、y)都继续循环,逻辑不合理,应该只在用户输入Y/y时才重试。 - 缺少退出提示:输入N后没有输出要求的
Bye!。
完善后的完整代码
package reverseword; import java.util.Scanner; public class ReverseWord { public static void main(String[] args) { String tryAgain = "Y"; // 把Scanner放到循环外,避免重复创建 Scanner sc = new Scanner(System.in); do { String reversedString = ""; System.out.print("Enter string to reversed: "); String input = sc.nextLine(); reversedString = reverseString(input); System.out.println("Reversed String : " + reversedString); System.out.println("Try again? enter \"Y/N\": "); // 用sc读取用户的选择,用nextLine避免换行符干扰 tryAgain = sc.nextLine(); } while (tryAgain.equalsIgnoreCase("Y")); // 循环结束后输出退出提示 System.out.println("Bye!"); // 关闭Scanner释放资源 sc.close(); } // 递归反转字符串的方法逻辑正确,无需修改 public static String reverseString(String input) { if(input.isEmpty()) return input; return reverseString(input.substring(1)) + input.charAt(0); } }
代码修改说明
- Scanner位置调整:将
Scanner sc = new Scanner(System.in);移到do-while循环外,只创建一次实例,最后用sc.close()释放资源。 - 修复第14行:把
tryAgain = input.next();改成tryAgain = sc.nextLine();,用正确的Scanner对象读取用户输入。 - 优化循环条件:用
tryAgain.equalsIgnoreCase("Y")替代原条件,支持用户输入Y或y都能继续重试,输入其他内容(比如N/n、X等)都会退出循环。 - 添加退出提示:在循环结束后添加
System.out.println("Bye!");,满足输入N时的输出要求。
运行测试示例
Enter string to reversed: lala
Reversed String : alal
Try again? enter "Y/N": Y
Enter string to reversed: hello
Reversed String : olleh
Try again? enter "Y/N": N
Bye!
内容的提问来源于stack exchange,提问作者pearl ang
相关产品推荐
相关产品推荐

