亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 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 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號