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

如何从用户输入获取最值?Java do-while循环实现问题求助

问题排查:do-while循环求最值始终使用初始化值的问题

问题描述

在计算机科学课程作业中,要求用do-while循环找出用户输入的[-100,100]范围内数值的最大值和最小值。但代码运行后,最值始终保持初始化值,无法正确获取用户输入的有效数值;尝试用Integer.MAX_VALUE/Integer.MIN_VALUE初始化变量后,问题依然存在。

用户提供的代码如下:

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    double number;
    double max = 0;
    double min = 0;
    
    // Do while loop that asks the user for values from -100, 100, and determine max and min
    do {
        System.out.print("Enter value:");
        number = input.nextDouble();
        if(number == -19.5) {
            break;
        }
        
        if (number >= -100 && number <= 100) {
            
            if (number > max) {
            max = number;
            }
            if (number < min) {
            min = number;
            }
                
        } else {
            System.out.print("There were no valid values");
        }
        
    } while (true);
                
    System.out.println("The max value was " + max);
    System.out.println("The min value was " + min);
    
}

错误原因分析

  1. 初始化值逻辑错误

    • 用0初始化max和min时,若用户输入的所有有效数都小于0,max会一直保留0;若所有数都大于0,min也会一直保留0,无法正确更新。
    • 换成Integer.MAX_VALUE/Integer.MIN_VALUE时,这两个值转成double后分别是2147483647.0和-2147483648.0,远超出[-100,100]的范围:用户输入的数永远不会大于max初始值,也永远不会小于min初始值,导致最值始终无法更新。
  2. 未处理第一个有效输入的情况
    第一个有效输入时,应该直接将max和min设置为该数值,之后再通过比较更新,否则初始值会干扰后续判断。

  3. 无效输入提示逻辑错误
    当前代码只要输入不在[-100,100]范围内就输出"There were no valid values",但这个提示应该是在循环结束后,确认没有任何有效输入时才输出,否则会出现多次重复提示的问题。

修正后的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double number;
        double max;
        double min;
        boolean hasValidInput = false; // 标记是否有有效输入
        
        do {
            System.out.print("Enter value:");
            number = input.nextDouble();
            
            // 终止条件:输入-19.5时退出循环
            if (number == -19.5) {
                break;
            }
            
            // 判断输入是否在有效范围内
            if (number >= -100 && number <= 100) {
                if (!hasValidInput) {
                    // 第一个有效输入,直接赋值给max和min
                    max = number;
                    min = number;
                    hasValidInput = true;
                } else {
                    // 后续有效输入,比较更新最值
                    if (number > max) {
                        max = number;
                    }
                    if (number < min) {
                        min = number;
                    }
                }
            } else {
                System.out.println("输入无效,请输入[-100,100]范围内的数值");
            }
            
        } while (true);
        
        // 循环结束后,根据是否有有效输入输出结果
        if (hasValidInput) {
            System.out.println("The max value was " + max);
            System.out.println("The min value was " + min);
        } else {
            System.out.println("There were no valid values");
        }
        
        input.close(); // 关闭Scanner资源
    }
}

关键修改说明

  • 新增hasValidInput布尔变量,标记是否存在有效输入,避免无有效输入时输出初始化值。
  • 第一个有效输入时直接将max和min赋值为该数值,解决初始值干扰问题。
  • 调整无效输入的提示信息,改为单次输入无效时的提示,而非错误的全局提示。
  • 循环结束后根据hasValidInput判断输出结果,逻辑更严谨。
  • 新增input.close()关闭Scanner资源,避免资源泄漏。

内容的提问来源于stack exchange,提问作者GrilledCatEggs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 20:55:29