在 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 ...


我不知道是什么问题。


偶然的你
浏览 137回答 3
3回答

qq_花开花谢_0

您的 Max.max 方法更改了数组 - 以 . 开头的 3 行int tmp =。您的问题的根源可能是不了解引用类型。&nbsp;tmpArray = score不会制作数组的单独副本score——您只有对同一个数组的两个引用。这个概念是 Java 编程的基础。

潇潇雨雨

int[]是对象,因此在 Java 中是通过引用传递的。当您在Max#max(int[])方法中执行以下操作时:int[] tmpArray;tmpArray = score;两者tmpArray和score都将持有相同的引用,因此当您交换 中的值时tmpArray,score-array 也将被修改。您必须为 , 创建一个新的整数数组tmpArray,然后复制这些值。最简单的是以下两种之一:int[] tmpArray = score.clone();// or:int[] tmpArray = Arrays.copyOf(score, score.length);我建议第二个,.clone()通常用于其他目的。

一只甜甜圈

int max (int[] score) {&nbsp; &nbsp; int[] tmpArray;&nbsp; &nbsp; tmpArray = score;}score是对数组对象的引用。在这里,您创建对现有数组的新引用。要修复它,只需创建一个新的数组对象:int max(int[] score) {&nbsp; &nbsp; int[] tmpArray = Arrays.copyOf(score, score.length);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java