Stampare cornice matrice

di il
15 risposte

Stampare cornice matrice

Salve, avrei un compito da consegnare entro domani, ci sto lavorando da un po' e non riesco ad andare avanti.
Io devo fare questo metodo stampaCornice che deve stampare cosa ce intorno ad un numero selezionato per esempio
1 5 8
0 9 2
3 4 6

io seleziono 9 e quindi devo stampare 1, 5, 8 , 2, 6, 4, 3 e 0
ma non riesco a pensare a come fare.

questo è il metodo da fare.
/**
* Stampa la mini matrice intorno a riga, colonna
*
*
* ATTENZIONE ...........
*
*/
public void stampaIntornoMatrice( int riga,int colonna)
{

}

se qualcuno mi aiutasse sarebbe di grande aiuto.

15 Risposte

  • Re: Stampare cornice matrice

    1717Lonely ha scritto:


    Io devo fare questo metodo stampaCornice che deve stampare cosa ce intorno ad un numero selezionato per esempio
    1 5 8
    0 9 2
    3 4 6

    io seleziono 9 e quindi devo stampare 1, 5, 8 , 2, 6, 4, 3 e 0
    ma non riesco a pensare a come fare.
    Quali sono i tuoi dubbi, esattamente? Avendo "visibilità" di una matrice già composta, se al metodo viene passata riga/colonna del valore usato come "centro" (es. riga/colonna del 9 nell'esempio sopra), allora è sufficiente "giocare" con un +1 o -1 su riga e colonna per trovare tutti gli elementi attorno al valore indicato. E per correttezza/completezza, sarebbe anche appropriato verificare che un +1 o -1 non faccia andare "fuori" dalla matrice causando eccezione.
  • Re: Stampare cornice matrice

    Beh il mio dubbio è che non so proprio da dove partire, come hai detto tu bisogna cercare sempre di usare sempre quello nel mezzo per non andare fuori, per io non è che ho solo quei numeri ora ti mostro.
    Non so come scrivere il codice per prendere la cornice


    Stampa Mini Matrice con elemento centrale

    //qua devo mettere ciò che ti ho detto, cioè la cornice + elemento centrale




    Stampa con toString
    questo è la grandezza della matrice che devo utilizzare

    1 8 5 4 6 7 6 1 8 3
    6 10 7 3 5 5 6 5 5 3
    10 1 5 9 7 10 4 7 3 5
    9 7 3 5 3 7 10 5 8 2
    8 2 1 2 7 1 2 7 5 9
    6 6 3 5 9 7 10 5 5 8
    10 1 8 8 4 7 2 3 5 9
    7 8 1 8 6 2 2 7 3 5
    6 2 10 7 6 10 9 3 5 1
    3 6 2 3 9 3 6 9 5 7
  • Re: Stampare cornice matrice

    andbin ha scritto:


    1717Lonely ha scritto:


    Io devo fare questo metodo stampaCornice che deve stampare cosa ce intorno ad un numero selezionato per esempio
    1 5 8
    0 9 2
    3 4 6

    io seleziono 9 e quindi devo stampare 1, 5, 8 , 2, 6, 4, 3 e 0
    ma non riesco a pensare a come fare.
    Quali sono i tuoi dubbi, esattamente? Avendo "visibilità" di una matrice già composta, se al metodo viene passata riga/colonna del valore usato come "centro" (es. riga/colonna del 9 nell'esempio sopra), allora è sufficiente "giocare" con un +1 o -1 su riga e colonna per trovare tutti gli elementi attorno al valore indicato. E per correttezza/completezza, sarebbe anche appropriato verificare che un +1 o -1 non faccia andare "fuori" dalla matrice causando eccezione.

    comunque il fatto del +1 e -1 l'avevo pensato pure io ma non so come farlo... potresti mostrarmi come?
  • Re: Stampare cornice matrice

    Ovvero lo vuoi fatto per consegnarlo oggi.

    Magari il tuo professore sta leggendo questo thread in questo momento perché è iscritto e per te va bene?
  • Re: Stampare cornice matrice

    oregon ha scritto:


    Ovvero lo vuoi fatto per consegnarlo oggi.

    Magari il tuo professore sta leggendo questo thread in questo momento perché è iscritto e per te va bene?
    ehm no se è iscritto meglio per lui, io sto cercando di capire come farlo e basta se poi tu pensi ciò puoi pure non rispondere!
  • Re: Stampare cornice matrice

    1717Lonely ha scritto:


    oregon ha scritto:


    Ovvero lo vuoi fatto per consegnarlo oggi.

    Magari il tuo professore sta leggendo questo thread in questo momento perché è iscritto e per te va bene?

    anzi sarebbe pure contento che io cerco di capire le cose da solo e non andare in un gruppo di persone che sanno già fare tutto scusami, quindi non fare polemica a caso
  • Re: Stampare cornice matrice

    Allora perché non proponi tu il codice invece di chiederlo? Ti ho risposto perché aspetto che tu proponga qualcosa in base a quanto suggerito da andbin...

    Non faccio polemiche....
  • Re: Stampare cornice matrice

    Non mi pare un esercizio così complicato che richieda dei ragionamenti complessi.
    Più che altro è "molto noioso" perchè si devono prendere in considerazione i punti "critici" che ti ho evidenziato qui sotto:
    
       Colonne
    |           |
    X X X X X X X --
    X X X X X X X  R
    X X X X X X X  I
    X X X X X X X  G
    X X X X X X X  H
    X X X X X X X  E
    X X X X X X X --
    
    Per il resto non ci vedo alcuna difficoltà.
  • Re: Stampare cornice matrice

    1717Lonely ha scritto:


    Beh il mio dubbio è che non so proprio da dove partire, come hai detto tu bisogna cercare sempre di usare sempre quello nel mezzo per non andare fuori, per io non è che ho solo quei numeri ora ti mostro.
    Non so come scrivere il codice per prendere la cornice
    Per risolvere in maniera "furba" (e senza fare troppe ripetizioni), sarebbe utile fare un altro metodo es.:

    public void stampaElementoMatrice(int riga, int colonna)

    che verifica innanzitutto se riga/colonna sono nella matrice, se sì stampa il valore dell'elemento, se no non fa nulla.

    A quel punto nel tuo stampaIntornoMatrice si tratta SOLO di fare 8 invocazioni (otto righe!) e basta di stampaElementoMatrice "giocando" con il +1/-1 facendo tutte le 8 combinazioni per indirizzare gli elementi nell'ordine specifico che hai detto.

    Sarebbe tutto qui ...
  • Re: Stampare cornice matrice

    oregon ha scritto:


    Allora perché non proponi tu il codice invece di chiederlo? Ti ho risposto perché aspetto che tu proponga qualcosa in base a quanto suggerito da andbin...

    Non faccio polemiche....
    Ho provato a fare così.....
    per primo ho inserito nella variabili d'istanza private static final... che controlla i le caselle vicine al centro (0,0)

    // variabili d'istanza
    private int nelementi;
    private int[][] matrice; // vettore di temperature
    private static final int[][] casVicine =
    {{-1, 0},
    {-1, -1},
    {-1, 1},
    {0, -1},
    {0,0},
    {0, 1},
    {1, -1},
    {1, 0},
    {1, 1}};

    poi nel metodo ho scritto questo
    public void stampaIntornoMatrice( int riga,int colonna)
    {
    int indexX, indexY;

    for(int i = 0; i < 9; i++)
    {
    indexX = riga + casVicine [0];
    indexY = colonna + casVicine[1];
    if((indexX >= 0 && indexX < nelementi) && (indexY >= 0 && indexY < nelementi))
    System.out.print(matrice[indexX][indexY]);
    System.out.print("\n");
    }
    }

    ciò mi restituisce cosa ho intorno al 0,0
  • Re: Stampare cornice matrice

    1717Lonely ha scritto:


    Ho provato a fare così.....
    per primo ho inserito nella variabili d'istanza private static final... che controlla i le caselle vicine al centro (0,0)
    Sì, anche usare una matrice fissa con le varie combinazioni preimpostate di -1/0/+1 è una soluzione "furba".

    1717Lonely ha scritto:


    public void stampaIntornoMatrice( int riga,int colonna)
        {
            int indexX, indexY;
    
            for(int i = 0; i < 9; i++)
            {
                indexX = riga + casVicine [i][0];
                indexY = colonna + casVicine[i][1];
                if((indexX >= 0 && indexX < nelementi) && (indexY >= 0 && indexY < nelementi))
                    System.out.print(matrice[indexX][indexY]);
                    System.out.print("\n");
            }
        }
    Tecnicamente mi pare corretto, si potrebbe migliorare un pelino (es. non schiantare lì 9)

    Nota che se la matrice non fosse esattamente "quadrata", sarebbero da gestire meglio i controlli (e di per sè, NON serve quella variabile nelementi).

    P.S. \n in Java NON è il newline in senso generale. Usa println()
  • Re: Stampare cornice matrice

    andbin ha scritto:


    1717Lonely ha scritto:


    Ho provato a fare così.....
    per primo ho inserito nella variabili d'istanza private static final... che controlla i le caselle vicine al centro (0,0)
    Sì, anche usare una matrice fissa con le varie combinazioni preimpostate di -1/0/+1 è una soluzione "furba".

    1717Lonely ha scritto:


    public void stampaIntornoMatrice( int riga,int colonna)
        {
            int indexX, indexY;
    
            for(int i = 0; i < 9; i++)
            {
                indexX = riga + casVicine [i][0];
                indexY = colonna + casVicine[i][1];
                if((indexX >= 0 && indexX < nelementi) && (indexY >= 0 && indexY < nelementi))
                    System.out.print(matrice[indexX][indexY]);
                    System.out.print("\n");
            }
        }
    Tecnicamente mi pare corretto, si potrebbe migliorare un pelino (es. non schiantare lì 9)

    Nota che se la matrice non fosse esattamente "quadrata", sarebbero da gestire meglio i controlli (e di per sè, NON serve quella variabile nelementi).

    P.S. \n in Java NON è il newline in senso generale. Usa println()
    grazie mille comunque volevo chiederti cosa intendi per il non schianter il 9?
  • Re: Stampare cornice matrice

    1717Lonely ha scritto:


    grazie mille comunque volevo chiederti cosa intendi per il non schianter il 9?
    for (int i = 0; i < casVicine.length; i++)
  • Re: Stampare cornice matrice

    andbin ha scritto:


    1717Lonely ha scritto:


    grazie mille comunque volevo chiederti cosa intendi per il non schianter il 9?
    for (int i = 0; i < casVicine.length; i++)
    public void stampaIntornoMatrice(int riga,int colonna)
    {
    // to do
    String stringa = new String("");
    int indexC, indexR;
    for (int i = 0; i < casVicine.length; i++)
    {
    indexC = riga + casVicine[0];
    indexR = colonna + casVicine[1];
    if((indexC >= 0 && indexC < nelementi) && (indexR >= 0 && indexR < nelementi))

    System.out.print(matrice[indexR][indexC]);
    System.out.print("\n");
    }

    }



    Alla fine ho finito il progetto utilizzando questo codice, usando sempre questo ''trucchetto''
    private static final int[][] casVicine =
    {{-1, -1},
    {-1, 0},
    {-1, 1},
    {0, -1},
    {0, 0},
    {0, 1},
    {1, -1},
    {1, 0},
    {1, 1}};
    grazie mille per il tuo aiuto
Devi accedere o registrarti per scrivere nel forum
15 risposte