You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 10:18:02