Java程序问题:无法正确输出数字中最小数位的位置
问题排查:找出数字中最小数位的所有位置
你的代码存在两个核心问题,并非仅输出环节出错:
1. 逻辑错误:误找最大数位而非最小数位
你初始化maxVal = -1,并通过maxVal < a判断更新值。但a是字符类型,实际比较的是ASCII码——数字字符'0'-'9'的ASCII范围是48-57,-1远小于所有数字字符,导致代码实际在找最大的数位,而非需求中的最小数位。
2. 输出错误:直接打印数组对象而非元素内容
直接执行System.out.println("position - " + s1)时,Java会打印数组的哈希标识(如[Ljava.lang.Integer;@xxxxxxx),而非数组内的具体位置值。
修正后的代码
import java.util.Scanner; import java.util.LinkedList; import java.util.Arrays; public class test1 { public static void main(String[] args) { Scanner text = new Scanner(System.in); System.out.println("Enter: "); int k = text.nextInt(); String s = Integer.toString(k); Integer[] s1 = getMinPos(s); // 将数组转为空格分隔的字符串并按格式输出 System.out.println("position - [" + String.join(" ", Arrays.stream(s1).map(String::valueOf).toArray(String[]::new)) + "]"); } static Integer[] getMinPos(String num) { LinkedList<Integer> list = new LinkedList<>(); // 初始化最小数位为最大数字字符'9'(ASCII码57) int minVal = '9'; int counter = 1; for (char a : num.toCharArray()) { // 找到更小的数位时,更新最小值并清空已有位置列表 if (a < minVal) { minVal = a; list.clear(); } // 当前数位等于最小值时,记录位置(从1开始计数) if (a == minVal) { list.add(counter); counter++; } } return list.toArray(new Integer[0]); } }
修改说明
- 逻辑修正:将
maxVal改为minVal并初始化为'9',判断条件改为a < minVal,确保找到最小数位; - 输出修正:通过
Arrays.stream将Integer数组转为字符串数组,再用String.join拼接成空格分隔的格式,最终包裹在[]中输出; - 测试输入
1231时,输出结果为position - [1 4],符合需求。
内容的提问来源于stack exchange,提问作者Kajletskiy
相关产品推荐
相关产品推荐

