Java如何实现保留用户输入的最大double值,仅输入更大值时更新
问题核心原因
- 存储最大值的变量
MaxLon、MaxLat定义在while循环内部,每次循环都会被重置为0,无法保存上一轮的最大值 - 最大值初始值设置为0不合理,若用户输入合法负经度/纬度,初始值0会被误判为最大值
- 合法值校验逻辑顺序错误,应先判断输入的经纬度是否在合法范围内,再进行最大值比较
- 纬度的最大值比较逻辑完全缺失
- while循环判断条件冗余,仅需判断用户是否选择继续输入即可
修正后代码
import java.util.Scanner; public class U4_L2_Activity_Three{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); // 最大值变量移到循环外,初始化为double类型最小值,避免负数输入的判断问题 double maxLon = -Double.MAX_VALUE; double maxLat = -Double.MAX_VALUE; int x = 1; while (x == 1) { System.out.println("Please enter the longitude:"); double lon = scan.nextDouble(); // 先校验经度合法性,合法再更新最大值 if (lon >= -180 && lon <= 180 && lon > maxLon) { maxLon = lon; } System.out.println("Please enter the latitude:"); double lat = scan.nextDouble(); // 纬度合法范围是-90到90,同理判断 if (lat >= -90 && lat <= 90 && lat > maxLat) { maxLat = lat; } System.out.println("当前记录的最大经度:" + maxLon); System.out.println("当前记录的最大纬度:" + maxLat); System.out.println("Would you like to enter another location (1 for yes, 0 for no)?"); x = scan.nextInt(); } // 循环结束后输出最终最大值 System.out.println("最终记录的最大经度:" + maxLon); System.out.println("最终记录的最大纬度:" + maxLat); scan.close(); } }
主要修改说明
- 把存储最大值的变量移到循环外定义,避免每次循环被重置
- 初始最大值设为double类型的最小值,覆盖所有合法负经纬度的场景
- 补充纬度的合法校验和最大值更新逻辑,纬度合法范围调整为
-90~90符合地理规范 - 简化while循环判断逻辑,仅当用户输入1时继续循环,输入0直接退出
- 补充了循环结束后的最终最大值输出,以及每次输入后的实时最大值提示
- 新增Scanner资源关闭逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者Person
相关产品推荐
相关产品推荐

