array的作业,请老师您检查下

来源:7-14 测评作业

unbreakable_全栈

2024-11-19

import java.util.Arrays;

public class WorkArrayDemo {
public static void main(String[] args) {
// 1、将表格中的数据存储到数组中
staticData();
DynamicInitialization();
// 2、遍历数组,将大于 100 的元素打印输出
int[] arr = {16, 125, 13, 246, 55, 18, 26, 160, 99, 120, 188};

    // 调用函数打印大于100的元素
    printElementsGreaterThan100(arr);

    // 3、找出数组中下标为偶数的所有元素
    /**
     * 问题分析:
     * 数组索引错误:在Java中,数组的索引是从0开始的,但代码中的注释却从arr[1]开始,这可能会导致混淆。
     * 偶数判断逻辑正确:代码通过检查每个元素的索引是否为偶数来确定该元素是否是偶数(即下标为偶数的元素)。
     * 偶数判断逻辑正确:代码通过检查每个元素的索引是否为偶数来确定该元素是否是偶数(即下标为偶数的元素)。
     * 优化建议:
     * 简化输出语句以去除不必要的字符。
     * 更新注释以确保与实际代码一致。
     */
    int[] arr_3 = {16, 125, 13, 246, 55, 18, 26, 160, 99, 120, 188};

    // 调用函数来打印所有偶数索引的元素
    printEvenIndexedElements(arr_3);

    // 4、小慕周几的运动步数最多?
    int[] steps = {22716, 16512, 19472, 25720, 15767, 12898, 21169};

    // 调用函数来找出步数最多的一天并打印结果
    printMaxSteps(steps);

    // 5、计算每个人的平均分数
    // 评委对每位选手的打分数据
    double[][] scores = {
            {99, 96, 97.5, 89, 95.5, 93, 99, 95, 98, 99.5},
            {91, 95.5, 97, 92, 99, 98, 94, 95.5, 96, 99},
            {90.5, 92, 99, 99.5, 95, 90, 97, 96, 93, 91.5},
            {98, 95, 95.5, 99, 92, 93.5, 93, 97.5, 96, 99.5},
            {95, 91.5, 93, 96, 98.5, 99, 94, 96.5, 95.5, 92}
    };

    calculateAverageScores(scores);

    // 6、在“第5题”的基础上,将个人平均成绩排序输出
    sortAverageScores();
}

// 6、在“第5题”的基础上,将个人平均成绩排序输出
public static void sortAverageScores() {
    // 存储平均成绩的数组
    double[] averageScores = {96.15, 95.7, 94.35, 95.9, 95.1};
    for (int i = 0; i < averageScores.length - 1; i++) {
        for (int j = 0; j < averageScores.length - i - 1; j++) {
            if (averageScores[j] > averageScores[j + 1]) {
                // 交换两个元素的值
                double temp = averageScores[j];
                averageScores[j] = averageScores[j + 1];
                averageScores[j + 1] = temp;
            }
        }
        System.out.print("第" + (i+1) + "轮排序后的结果:");
        for (double k : averageScores) { // k 表示数组中的元素值
            System.out.print(k + " "); // 打印数组元素值和空格作为分隔符
        }
        System.out.println(); // 在每轮结果后换行,以便清晰查看每轮排序的结果
    }
}

// 5、计算每个人的平均分数
public static void calculateAverageScores(double[][] scores) {
    for (int i = 0; i < scores.length; i++) {
        double sum = 0;
        for (int j = 0; j < scores[i].length; j++) {
            sum += scores[i][j];
        }
        double average = sum / scores[i].length;
        System.out.println("第" + (i + 1) + "名选手平均得分: " + String.format("%.2f", average));
    }
}

// 4、小慕周几的运动步数最多?
// 定义一个函数,找出数组中最大的步数及其对应的周几
public static void printMaxSteps(int[] steps) {
    // 假设最大值是第一个元素
    int maxSteps = steps[0];
    int maxIndex = 0; // 初始化最大步数对应的索引

    // 遍历数组找到最大的步数值及其索引
    for (int i = 1; i < steps.length; i++) {
        if (steps[i] > maxSteps) {
            maxSteps = steps[i];
            maxIndex = i;
        }
    }

    // 打印出周几的步数最多以及具体步数
    System.out.println("周" + getWeekday(maxIndex + 1) + "的运动步数最多,是:" + maxSteps);
}
// 定义一个函数,根据数字返回对应的周几
public static String getWeekday(int dayNumber) {
    switch (dayNumber) {
        case 1: return "一";
        case 2: return "二";
        case 3: return "三";
        case 4: return "四";
        case 5: return "五";
        case 6: return "六";
        case 7: return "日";
        default: return "未知";
    }
}

// 3、找出数组中下标为偶数的所有元素
/**
 * 打印数组中所有偶数索引的元素
 *
 * @param array 要处理的整数数组
 */
private static void printEvenIndexedElements(int[] array) {
    for (int i = 0; i < array.length; i += 2) {
        System.out.println("Element at index " + i + ": " + array[i]);
    }
}

// 2、遍历数组,将大于 100 的元素打印输出
// 定义一个函数,打印数组中所有大于100的元素
public static void printElementsGreaterThan100(int[] array) {
    for (int value : array) {
        if (value > 100) {
            System.out.println(value);
        }
    }
}
// 1、静态初始化(已知所有元素)
public static void staticData () {
    // 表格中的数据
    double[] tableData = {120, 95.5, 88, 125.9, 69, 76.7};
    // 打印数组以验证数据是否正确存储
    for (double value : tableData) {
        System.out.print(value + ",");

// System.out.println(value);
}
}
// 1、动态初始化(可能需要根据条件添加元素)
// 如果您需要在运行时根据某些条件来决定数组的长度或值,那么可以使用动态初始化。
public static void DynamicInitialization () {
// 假设我们有一个方法可以获取表格数据的行数
int numRows = getTableRowCount(); // 这里只是一个占位符

    // 创建一个指定长度的数组
    double[] dynamicArray = new double[numRows];

    // 根据实际情况填充数据
    if (numRows > 0) {
        dynamicArray[0] = 120;
        dynamicArray[1] = 95.5;
        dynamicArray[2] = 88;
        dynamicArray[3] = 125.9;
        dynamicArray[4] = 69;
        dynamicArray[5] = 76.7;
    }
    // 打印数组以验证数据是否正确存储
    System.out.println(Arrays.toString(dynamicArray));
}
private static int getTableRowCount() {
    // 这里应该返回实际的行数
    return 6; // 假设表格中有6行数据
}

}

写回答

1回答

彭彭老师

2024-11-20

同学的作业完成的非常好,基础知识掌握扎实,逻辑清晰,每个题都添加了注释。

关于第3题,代码是正确的,对问题的分析不是太准确,这个题小慕的主要问题是数组的取值上限错误,原因如下:

数组的下标范围是 0 ~ arr.length-1,i 的取值上限要小于数组长度,等于数组长度将会发生数组越界。小慕的程序之所以没有报错,是因为数组 arr 的长度是 11,当 i = 11时,if 条件不成立,if 语句块没有执行,因此没有抛出数组越界的错误。

其余都没有问题。

https://img1.sycdn.imooc.com/szimg/673ddbcb09471efd08780672.jpg

0
0

Java零基础入门与实战

Java零基础入门与实战 多场景|多案例|全栈项目

287 学习 · 223 问题

查看课程