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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:50:22