Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di gordian
    Registrato dal
    Sep 2002
    Messaggi
    1,139

    [ JAVA ] array bidimensionali

    Ciao a tutti,
    ho da poco iniziato a studiare questo linguaggio e sto cercando di fare pratica con degli esercizi di livello base.

    Nello specifico mi trovo a dover inizializzare un array bidimensionale passando i valori di inizializz. come argomenti in un metodo. Con un secondo metodo dovrei poi stampare il contenuto di questo array. Ho scritto questo codice:
    codice:
    public class Diciannove
    {
    	void creaArray(int a, int b)
    	{ int arr[][] = new int [a][b]; }
    
        void stampaArray()
        {
    		for(int i = 0; i < arr.length; i++)
    			{
    			 for(int j = 0; j < arr[i].length; j++)
    				{
    				 System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);}
    				}
    			}
        }
    
        public static void main(String[] args)
        {
    		Diciannove ogg = new Diciannove();
    		ogg.creaArray(4,8);
    		ogg.stampaArray();
        }
    }
    Ho problemi però durante la compilazione.
    Sapete dirmi cosa ho sbagliato? Magari spiegandomi che tipo di errore ho fatto a livello concettuale?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Il problema è semplice e usuale: hai dichiarato e inizializzato l'array all'interno del metodo creaArray(), quindi quell'oggetto (l'array) ha vita ed è visibile solamente all'interno di quel metodo e non lo puoi, quindi, utilizzare in un altro metodo. Questo problema si chiama scope delle variabili e indica, appunto, la visibilità delle variabili.

    Per risolvere il tuo problema è sufficiente spostare la dichiarazione all'esterno dei metodi:
    codice:
    public class Diciannove
    {
       int arr[][];   // <-- Qui dichiaro l'array
    
       void creaArray(int a, int b)
       { [b]arr[][] = new int [a];  // <-- Qui inizializzo l'array }
    
       void stampaArray()
       {
          for(int i = 0; i < arr.length; i++)
          {
             for(int j = 0; j < arr[i].length; j++)
             {
                System.out.println("arr[" + i + "][" + j + "] = " + arr[i][j]);
             }
          }
       }
    
        public static void main(String[] args)
        {
    		Diciannove ogg = new Diciannove();
    		ogg.creaArray(4,8);
    		ogg.stampaArray();
        }
    }
    Poi avevi chiuso una graffa in più dopo il System.out...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di gordian
    Registrato dal
    Sep 2002
    Messaggi
    1,139
    Ma così continua a darmi errori in compilazione. Per essere precisi durante l'inizializzazione..

    Mi è pure venuto il dubbio che l'errore potesse essere attribuito alle parentesi [] dopo il nome dell'array e ho quindi provato a scrivere:
    codice:
    public class Diciannove
    {
       int[][] arr;   // <-- Qui dichiaro l'array
    
       void creaArray(int a, int b)
       { int[][] arr = new int [a][b]; } // <-- Qui inizializzo l'array
    Ma mi viene un output strano che non capisco... :master:
    Qual'è la sintassi giusta

  4. #4
    Utente di HTML.it L'avatar di gordian
    Registrato dal
    Sep 2002
    Messaggi
    1,139

    OK

    Ho individuato l'errore di sintassi.
    L'inizializzazione giusta è questa:
    codice:
    public class Diciannove
    {
       int[][] arr;   // <-- Qui dichiaro l'array
    
       void creaArray(int a, int b)
       { arr = new int [a][b]; } // <-- Qui inizializzo l'array
    Grazie.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Sì, hai ragione... non ho fatto caso alla sintassi, quanto alla posizione. In effetti la dichiarazione giusta è quella.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.