本教程手把手教你用 java 的字符串操作、while 循环和 if 判断,完成一个“城市录入统计”小程序:持续接收用户输入的城市名,直到输入 "stop" 为止,最后输出城市总数及字符数最多的城市名称。
本教程手把手教你用 java 的字符串操作、while 循环和 if 判断,完成一个“城市录入统计”小程序:持续接收用户输入的城市名,直到输入 "stop" 为止,最后输出城市总数及字符数最多的城市名称。
要完成这个任务,关键在于状态跟踪——我们需要在循环过程中持续记录两个核心信息:已录入的城市数量(count),以及当前遇到的最长城市名(longestCityName)。虽然问题中提到尚未学习 for 循环,但 while(true) + break 是完全符合初学者认知的控制结构,逻辑清晰且无需预先知道循环次数。
下面是一段简洁、健壮、仅使用 String、while 和 if 的完整实现:
import java.util.Scanner;
public class Cities {
public static void main(String[] args) {
int count = 0;
String longestCityName = ""; // 初始化为空字符串,length() = 0,便于首次比较
Scanner input = new Scanner(System.in);
while (true) {
System.out.print("Name of city: ");
String cityName = input.nextLine().trim(); // 使用 nextLine() 支持含空格的城市名(如 "New York"),trim() 去除首尾空格
if (cityName.equalsIgnoreCase("stop")) {
break; // 输入 stop 时立即退出循环
}
// 更新最长城市名:仅当当前城市名更长时才替换
if (cityName.length() > longestCityName.length()) {
longestCityName = cityName;
}
count++; // 每成功录入一个有效城市,计数器加 1
}
// 输出结果:需考虑零输入的边界情况
if (count > 0) {
System.out.printf("%d cities were entered and the name of the city with the most letters is: %s%n",
count, longestCityName);
} else {
System.out.println("You didn't enter any cities.");
}
input.close(); // 养成关闭 Scanner 的好习惯,避免资源泄漏
}
}✅ 关键设计说明:
- 使用 input.nextLine() 而非 input.next(),可正确读取含空格的城市名(如 "San Francisco"),trim() 确保用户多输空格不影响判断;
- equalsIgnoreCase("stop") 实现大小写不敏感匹配,提升用户体验(支持 "STOP"、"Stop" 等);
- longestCityName 初始化为空字符串 "",其 length() 为 0,天然满足首次比较条件;
- count > 0 的判断避免了“未输入任何城市”时输出错误结果(如显示 “0 cities… and the city is: ”);
- 最后调用 input.close() 是良好实践,防止潜在的资源占用问题。
? 小提示:本程序严格遵循题目要求,未使用数组、集合、方法封装或高级 API,所有逻辑均基于字符串长度比较、条件分支与循环控制——正适合 Java 入门阶段巩固核心语法。运行时按提示依次输入城市名,输入 stop 后即可看到清晰统计结果。

















