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

Java生成8元素随机整数数组交换最大值与首元素报错排查

问题说明

需要实现的功能:生成长度为8、元素为1-100随机整数的数组,将数组中的最大值与数组首个元素交换。现有代码运行报错,无法完成功能。
原有问题代码:

import java.util.Scanner;
import java.util.Random;

public class finalExam {
    public static void main(String []args) {
        Scanner input = new Scanner(System.in);
        Random spinner = new Random();

        int [] userInputs = new int [8];

        for (int i = 0; i < userInputs.length; i++) {
            userInputs[i] = spinner.nextInt(100)+1;
            System.out.println(userInputs[i]);
        }

        int largest = userInputs[0];
        
        for(int j = 1; j < userInputs.length; j++) {
            if(userInputs[j] > largest)
                largest = userInputs[j];
        }

        System.out.println("Your largest number is: " + largest);

        int holder;
        int [] arr = new int[101];

        for (int m = 0; m <= arr.length; m++) {
            holder = largest;
            userInputs[0] = userInputs[largest];
            holder = userInputs[0];
        }
    }
}
错误原因

代码共有3个核心问题,直接导致运行报错、功能失效:

  • 找最大值时只保存了最大值的数值,没有保存最大值在数组里的索引位置。后续交换时直接把最大值的数值当下标访问数组,而数组长度只有8(合法下标范围0-7),随机生成的最大值是1-100的数,只要值大于7就会触发数组下标越界异常。
  • 交换逻辑完全错误:多余创建了长度为101的arr数组,这个数组从头到尾没被用到;循环条件写为m <= arr.length,数组长度为101时合法下标最大是100,循环跑到m=101时本身就会触发越界;循环内的赋值逻辑完全混乱,根本没有完成两个元素值的互换。
  • 导入并初始化的Scanner对象全程没有使用,属于冗余代码。
修复后代码
import java.util.Random;

public class finalExam {
    public static void main(String []args) {
        Random spinner = new Random();
        int [] userInputs = new int [8];

        // 生成8个1-100的随机数存入数组,逐行打印原始数组
        for (int i = 0; i < userInputs.length; i++) {
            userInputs[i] = spinner.nextInt(100) + 1;
            System.out.println(userInputs[i]);
        }

        // 遍历数组,同时记录最大值和最大值对应的下标
        int largest = userInputs[0];
        int largestIndex = 0;
        for(int j = 1; j < userInputs.length; j++) {
            if(userInputs[j] > largest) {
                largest = userInputs[j];
                largestIndex = j;
            }
        }
        System.out.println("Your largest number is: " + largest);

        // 标准值交换逻辑:临时变量存首元素原值,完成首元素和最大值位置的互换
        int temp = userInputs[0];
        userInputs[0] = userInputs[largestIndex];
        userInputs[largestIndex] = temp;

        // 打印交换后的数组,方便验证结果
        System.out.println("交换完成后的数组:");
        for (int num : userInputs) {
            System.out.println(num);
        }
    }
}
修复说明
  • 移除了未使用的Scanner相关冗余代码
  • 遍历查找最大值时新增largestIndex变量,专门存最大值所在的数组下标,从根源上避免下标越界问题
  • 删除了无意义的arr数组和错误循环,使用标准的两值交换逻辑完成元素互换,逻辑清晰不会出错
  • 增加了交换后数组的打印逻辑,运行时可以直接看到结果是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:36:37