Problema Shift Array

di il
4 risposte

Problema Shift Array

Devo far un prorgramma dove il valore di un array1 è inserito dall'utente.
Successivamente il programma dovrà visualizzare le seguenti operazioni:
1-visualizza l'array 2 ed esegue uno shift Left
2-all'interno dell'array l'elemento di indice N-1 deve assumere il valore zero quindi:

Ad esempio dato l’array: 1 10 15 18. Il programma deve generare l’array:
10 15 18 0

Solo che il codice che ho scritto mi stampa l'array e basta senza gli elementi shiftati di una casella

public static int[] shiftLeft(int[] array) {
    int temp = array[0];
    for(int i =1;i  < array.length -1; i++) {
        array[i-1] = array[i];
        
    }
    return array;
}
    public static void printArray(int[] array) {
		for (int x = 0; x < array.length; x++) {
			System.out.print(array[x] + " ");
		}
		System.out.println();
	} 

    public static void main(String[] args) {
        // TODO code application logic here
        
          System.out.println("valori array");
        Scanner scan = new Scanner(System.in);
        
       int[] oldarray = new int[scan.nextInt()]; //dimensione
       int[] newarray = shiftLeft(oldarray);
      
                 for(int i = 0; i < oldarray.length; i++) {
                    int valori = scan.nextInt();
                    oldarray[i] = valori;
                       
                 }
                 //System.out.println(oldarray); //visualizza oldarray
 
                 //spostamento shift a sinistra

                 printArray(newarray);
    }
    
} 

4 Risposte

  • Re: Problema Shift Array

    Usa i tag code... vefi regolamento...
  • Re: Problema Shift Array

    KernelPanic ha scritto:


    Solo che il codice che ho scritto mi stampa l'array e basta senza gli elementi shiftati di una casella
    Hai invocato shiftLeft prima di chiedere in input i valori!
    Ragiona bene sulla sequenza delle operazioni.

    P.S. e comunque shiftLeft non è proprio corretto. Intanto quel temp non ti serve. Ma il problema è che i deve andare fino all'ultimo indice possibile ma ora non è così. E poi l'ultimo valore va azzerato (non l'hai fatto).

    E inoltre: ti è stato chiesto di creare un nuovo array o di modificare quello ricevuto?
  • Re: Problema Shift Array

    Andbin mi era stato chiesto di creare un nuovo array
  • Re: Problema Shift Array

    KernelPanic ha scritto:


    Andbin mi era stato chiesto di creare un nuovo array
    Allora vuol dire che in shiftLeft devi creare un nuovo array (nel codice scritto prima, non era affatto così).
    Da quanto hai detto, si vuole che il nuovo array abbia lo 0 finale. Quando crei un array int[] è già così per tutti gli elementi, pertanto non serve "toccare" l'ultimo elemento del nuovo array. Quindi ti basta semplicemente fare la copia nuovo[0] = vecchio[1] ... nuovo[1] = vecchio[2] ecc... (ovviamente dinamico, in ciclo, era per farti capire).
Devi accedere o registrarti per scrivere nel forum
4 risposte