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

如何在Java中找出整数中的最小和最大数字?(已尝试String+charAt方法)

从整数中提取最小和最大数字的解决方案

你用charAt()方法的思路本身没问题,大概率是初始化或者特殊情况处理出错了,比如没正确把字符转成数字、初始值设错,或者没处理负数的负号。下面给你两种可行的实现方案,附详细说明:

方案一:基于字符串处理(对应你的思路)

核心是把整数转成字符串后逐个遍历字符,注意要把字符转成对应的数字(通过字符 - '0'的方式,因为ASCII码中'0'到'9'是连续递增的),同时正确初始化最小/最大值:

import java.util.Scanner;

public class MinMaxDigit {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入整数:");
        String numStr = scanner.nextLine().trim();
        
        // 处理负数:去掉负号,只处理数字部分
        if (numStr.startsWith("-")) {
            numStr = numStr.substring(1);
        }
        
        // 初始化最小和最大值为第一个数字
        int min = numStr.charAt(0) - '0';
        int max = min;
        
        // 遍历剩余字符
        for (int i = 1; i < numStr.length(); i++) {
            int currentDigit = numStr.charAt(i) - '0';
            if (currentDigit < min) {
                min = currentDigit;
            }
            if (currentDigit > max) {
                max = currentDigit;
            }
        }
        
        System.out.println("Minimum number: " + min);
        System.out.println("Maximum number: " + max);
    }
}

常见错误点说明:

  • 如果初始min/max设为0,输入全大于0的数字时,结果会错误(比如输入56389,min会被错误地保留为0);
  • 没处理负号的话,'-'字符转成数字会得到负数,导致逻辑混乱;
  • 直接比较字符而不转数字(虽然字符的ASCII顺序和数字顺序一致,但转成数字更清晰,避免混淆)。

方案二:基于数字取余运算(无需转字符串)

如果不想用字符串处理,可以通过取余和整除操作逐个提取数字:

import java.util.Scanner;

public class MinMaxDigit {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入整数:");
        int num = scanner.nextInt();
        
        // 处理负数,转为绝对值(负数的数字部分最小最大值和绝对值一致)
        num = Math.abs(num);
        
        // 初始化最小和最大值为最后一位数字
        int min = num % 10;
        int max = min;
        
        num = num / 10; // 去掉最后一位
        
        // 遍历剩余数字
        while (num > 0) {
            int currentDigit = num % 10;
            if (currentDigit < min) {
                min = currentDigit;
            }
            if (currentDigit > max) {
                max = currentDigit;
            }
            num = num / 10;
        }
        
        System.out.println("Minimum number: " + min);
        System.out.println("Maximum number: " + max);
    }
}

两种方案都能正确处理单个数字的情况(比如输入7时,min和max都会是7),也支持负数输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:41:15