Hola,

Necesito ayuda con un código de Java.
La duda es simple pero no veo el fallo.

Creo una clase compuesta de tres arrays (original, descendente y ascendente).

Original sólo se usa en muestraOriginal() y en el constructor por lo que yo creo que al llamar a muestraOriginal() debería mostrarse el array tal cual se recibió en el constructor.

Pero no, al llamar a dicho método muestra el array tal cual quedó en el último método llamado desde el constructor.

Dejo el código a ver si podéis decirme dónde fallo:

public class pJava {
	
private int[] original;
private int[] descendente;
private int[] ascendente;

public pJava (int[] n) {
	this.original = n;
	this.ascendente=n;
	this.descendente=n;
	//al llamar al método muestraOriginal muestra siempre 
	//la última de las 2 siguientes ordenaciones en lugar del array original ¿?¿?¿?
  //si cambio el orden cambia el String devuelto por muestraOriginal()
	ordenacionAsc();
	ordenacionDesc();
	
}

public String muestraOriginal(){
	String aMostrar="";
	for(int i=0; i<this.original.length; i++){
		aMostrar=aMostrar+this.original[i]+" ";
	}
	
	return aMostrar;
}

public void ordenacionAsc(){
	int aux;
	for(int i=0; i<this.ascendente.length-1; i++){
		for(int j=i+1; j<this.ascendente.length; j++){
			if(this.ascendente[j]< this.ascendente[i]){
				aux=this.ascendente[i]; this.ascendente[i]=this.ascendente[j]; this.ascendente[j]=aux;
			}
		}
	}
}

public void ordenacionDesc(){
	int aux;
	for(int i=0; i<this.descendente.length-1; i++){
		for(int j=i+1; j<this.descendente.length; j++){
			if(this.descendente[j]> this.descendente[i]){
				aux=this.descendente[i]; this.descendente[i]=this.descendente[j]; this.descendente[j]=aux;
			}
		}
	}
}
}

El problema es esto:

    public pJava (int[] n) {
       this.original = n;
       this.ascendente=n;
       this.descendente=n;

Como asignas la misma N a cada una de las otras 3 referencias, todas están apuntando al mismo sitio, entonces al usar los metodos de ordenar de forma tanto Ascdendente como descendente siempre se hacen sobre la misma Array, pero al ordenarlo cada vez para que sean diferentes, si quieres usar una diferente tendrias que usar algo similar a esto:

this.original = Arrays.copyOf(n,n.length);

o copiarla con un bucle normal.

Salu2, jjy.

Vamos o lo hago así o así:

this.original= new int[n.length];

y después lo lleno con un bucle no?

Si, en esencia es lo mismo xD.

Muchas gracias! 🙂