Se está cambiando la matriz cuando está en la declaración

Creo que se supone que se publicará con códigos completos en este momento.

Cuando intento obtener valores de Scanner en una matriz llamada "score",

el segundo para la declaración muestra resultados inesperados.

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];
    }
}

Por ejemplo, cuando escribo 3 10 20 30, entonces viene 10 20 10 ...

no 10 20 30 ...

No se cual es el problema.

Respuesta 1

Su método Max.max cambia la matriz: las 3 líneas que comienzan con int tmp =.

Probablemente la fuente de sus problemas no es entender los tipos de referencia. tmpArray = scoreno hace una copia separada de la matriz score; solo tiene dos referencias a la misma matriz. Este concepto es fundamental para la programación Java.

Respuesta: 2
int max (int[] score) {
    int[] tmpArray;
    tmpArray = score;
}

scorees una referencia al objeto de matriz. Aquí puede crear una nueva referencia a la matriz existente. Para solucionarlo, solo crea un nuevo objeto de matriz:

int max(int[] score) {
    int[] tmpArray = Arrays.copyOf(score, score.length);
}
Respuesta: 3

He seguido este tutorial para lanzar una url en Android a través de jni call. Se ejecuta con exito. De la misma manera, quiero mostrar un mensaje de brindis de mi capa cocos2dx como este: vacío público estático ...

Quiero una forma genérica de convertir un objeto Java en una tabla HTML que contenga las variables miembro de este objeto como el nombre de la columna y el valor de este miembro como un valor en la tabla como esta: clase ...

Tengo una aplicación Java en la que los usuarios pueden cargar "complementos" de terceros para mejorar la experiencia del usuario. Existe una API para uso de estos complementos, pero el software de terceros debe ser ...

Estoy desarrollando una aplicación web en la que estoy usando Java como mi front-end y shell como mi back-end. Estoy procesando muchos archivos en shell ... por ejemplo, si tengo que procesar 100 archivos. Soy ...