为了账号安全,请及时绑定邮箱和手机立即绑定

在 for 语句中更改数组

在 for 语句中更改数组

偶然的你 2022-05-25 16:34:12
我认为它应该在这个时候发布完整的代码。当我试图从 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 ...我不知道是什么问题。
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2022-05-25
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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()通常用于其他目的。


查看完整回答
反对 回复 2022-05-25
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

int max (int[] score) {

    int[] tmpArray;

    tmpArray = score;

}

score是对数组对象的引用。在这里,您创建对现有数组的新引用。要修复它,只需创建一个新的数组对象:


int max(int[] score) {

    int[] tmpArray = Arrays.copyOf(score, score.length);

}


查看完整回答
反对 回复 2022-05-25
  • 3 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信