如何在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
相关产品推荐
相关产品推荐

