Copia di array in array

di il
4 risposte

Copia di array in array

Ciao raga,  mi sto esercitando con java , e non riesco a fare questi metodo , o almeno , mi dà errore.

Il metodo consiste in questo:

Per informazione MatriceDicaratteri è un'array bidimensionale quadrato di char.

/* Restituisce un oggetto di tipo MatriceDiCaratteri che rappresenta la sottomatrice dell’oggetto ricevente (this) che inizia nell’elemento (i,i) e finisce nell’elemento (j,j). Si può assumere che gli indici i e j siano indici validi. */ 

public MatriceDiCaratteri estraiSottomatrice(int i, int j){…}

Quindi devo fare una sottomatrice partendo dall'indice di riga-colonna i, e finire nell'indice di riga-colonna j;

Ho fatto in questo modo , ma probabilmente c'è un'errore in qualche for:

public MatriceDiCaratteri estraiSottomatrice(int i, int j){
//In questo for vedo quanto deve essere grande la mia nuova matrice, in particolare vedo di quante righe-colonne deve 
essere fatta
    int dim=0;
for(int k=i;k<=j;k++){
    for(int z=i;z<=j;z++){
    }
    dim++;
}

//A questo punto procedo alla copia dei valori della matrice nel nuovo array(w)

int riga=0;
int colonna=0;
char[][] w=new char[dim][dim];
for(int k=i;k<=j;k++){
    for(int z=i;z<=j;z++){
        w[riga][colonna]=mat[k][z];
        colonna++;
    }
    riga++;
}
//Creo l'oggetto con il nuovo array
        MatriceCaratteri t = new MatriceCaratteri(w);
        return t;
        }

In esecuzione , mettiamo che la mia matrice iniziale sia 5x5 , e metto come indici 1 e 3 , mi da come errore :

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

Probabilmente l'errore è su uno dei for , magari scorro qualcosa di troppo , non so , qualcuno può aiutarmi?

4 Risposte

  • Re: Copia di array in array

    int dim=0;
    for(int k=i;k<=j;k++){
        for(int z=i;z<=j;z++){
        }
        dim++;
    }
    

    Cioè, per sapere quante righe e colonne ci sono in un range quadrato [i, i] - [j, j] usi un for con un for annidato e un contatore? Senza offesa, ma come stavi messo in aritmetica alle elementari? Ciò che hai scritto è l'equivalente del fare una somma tra due numeri contando uno ad uno sulle dita delle mani. :D

    Fare j - i non ti è venuto in mente?

    Per quanto riguarda l'eccezione, ce l'hai perchè nella routine di copia, ogni volta che cambi riga devi ricordarti di azzerare il contatore delle colonne. Quindi, fuori dal for interno devi incrementare riga (e lo fai correttamente) e riporre colonna = 0.

  • Re: Copia di array in array

    Per quanto riguarda il j-i , lo avevo fatto subito  , anzi ,per la precisione (j-i)+1 , in quanto altrimenti mancherebbe una riga-colonna(3-1=2, mentre io devo fare da 1 a 3 compresi , che sono 3) , solo che pensando potesse essere quello l'errore ho cambiato, ma evidentemente non era quello (lasciamo stare le doti in aritmetica) :).

    Ora provo a cambiare la routine di copia.

  • Re: Copia di array in array

    06/06/2023 - biagio-23 ha scritto:


    per la precisione (j-i)+1 , in quanto altrimenti mancherebbe una riga-colonna(3-1=2, mentre io devo fare da 1 a 3 compresi , che sono 3)

    Corretto, non avevo fatto caso che l'indice J era compreso.

  • Re: Copia di array in array

    Comunque grazie mille per quanto riguarda il fatto di azzerare le colonne!!!

Devi accedere o registrarti per scrivere nel forum
4 risposte