首页 > 解决方案 > 在 for 语句中更改数组

问题描述

我认为它应该在这个时候发布完整的代码。

当我试图从 Scanner 获取值到名为“score”的数组中时,

第二个 for 语句显示了意想不到的结果。

import java.util.Scanner;

public class B1546 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int N = input.nextInt();
        int[] score = new int[N];
        Max scoreMax = new Max();
        double sum = 0;

        for (int i=0; i<N; i++) {
            score[i] = input.nextInt();
        }

        for (int i=0; i<N; i++) {
            System.out.println(score[i]); // this show the problems
            sum = sum + ((double) score[i] / scoreMax.max(score) * 100);
        }

        System.out.println(sum / N);
    }
}

class Max {
    int max (int[] score) {
        int[] tmpArray;
        tmpArray = score;

        for( int i=0; i<score.length-1; i++) {
            for( int j=i+1; j<score.length; j++) {
                if (tmpArray[i]<tmpArray[j]) {
                    int tmp = tmpArray[i];
                    tmpArray[i] = tmpArray[j];
                    tmpArray[j] = tmp;
                }
            }
        }
        return tmpArray[0];
    }
}

例如,当我输入 3 10 20 30 然后它来了 10 20 10 ...

不是 10 20 30 ...

我不知道是什么问题。

标签: java

解决方案


您的 Max.max 方法更改了数组 - 以 . 开头的 3 行int tmp =

您的问题的根源可能是不了解引用类型。 tmpArray = score不会制作数组的单独副本score——您只有对同一个数组的两个引用。这个概念是 Java 编程的基础。


推荐阅读