如何在Java中使用字母'X'终止循环?
用字母终止Java循环的实现方案
你当前的代码用nextInt()读取输入,只能处理数字,输入字母会直接抛出InputMismatchException,要实现「输入X退出」的功能,需要调整输入读取逻辑:先读取字符串,判断是否为终止符,再处理数字转换。以下是修改后的完整代码:
import java.util.Scanner; import java.util.InputMismatchException; public class AverageDemo { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int input = 0; int sum = 0; int count = 0; double avg = 0; // do...while 循环实现 System.out.println("Average Demo using do Loop"); System.out.println(); System.out.println("Calculates an average of all numbers: Enter 'X' when finished"); String userInput; do { System.out.print("Enter number "); userInput = scnr.nextLine().trim(); // 读取输入并去除首尾空格 // 判断是否输入终止符 if (userInput.equalsIgnoreCase("X")) { break; // 退出循环 } // 尝试转换为数字 try { input = Integer.parseInt(userInput); sum += input; count++; } catch (NumberFormatException e) { System.out.println("无效输入,请输入数字或X退出"); } } while (true); // 循环持续直到输入X if (count > 0) { avg = (double) sum / count; // 强制转浮点避免整数除法丢失精度 System.out.println("The average of all numbers is " + avg); } else { System.out.println("未输入任何数字,无法计算平均值"); } System.out.println(); System.out.println(); // 重置变量 count = 0; input = 0; avg = 0; sum = 0; // while 循环实现 System.out.println("Average Demo using a While Loop"); System.out.println(); System.out.println("Calculates an average of all numbers: Enter 'X' when finished"); while (true) { System.out.print("Enter number "); userInput = scnr.nextLine().trim(); if (userInput.equalsIgnoreCase("X")) { break; } try { input = Integer.parseInt(userInput); sum += input; count++; } catch (NumberFormatException e) { System.out.println("无效输入,请输入数字或X退出"); } } if (count > 0) { avg = (double) sum / count; System.out.println("The average of all numbers is " + avg); } else { System.out.println("未输入任何数字,无法计算平均值"); } System.out.println(); // 打印星号金字塔的for循环保持不变 for (int i = 0; i < 10; i++) { for (int y = 0; y <= i; y++) { System.out.print("*"); } System.out.println(); } scnr.close(); } }
关键修改点说明:
- 输入读取方式:改用
scnr.nextLine()读取完整输入行,避免nextInt()遗留换行符导致的读取异常,同时能处理字母输入。 - 终止判断:用
equalsIgnoreCase("X")实现不区分大小写的终止(输入x也能退出),符合用户使用习惯。 - 异常处理:捕获
NumberFormatException,处理用户输入非数字也非X的情况,给出友好提示。 - 平均值计算优化:将
sum强制转为double再做除法,避免整数除法导致的精度丢失(比如总和为5、计数为2时,原来的代码会得到2,修改后得到2.5)。 - 边界处理:增加
count > 0的判断,避免用户直接输入X导致的除以0异常。
内容的提问来源于stack exchange,提问作者Lis12
相关产品推荐
相关产品推荐

