PDA

View Full Version : [JAVA] Error: Array required, but ... found


Bestseller
20-02-2012, 20:08
Buonasera a tutti.
Ho un problema con il compilatore di Java che mi segnala un errore che non riesco ad interpretare.
Il programma che sto scrivendo consta di due file sorgente .java.
Il primo è MainClass.java ed è contenuto nella cartella "esercizio":
package esercizio;

import java.io.*;
import java.util.Scanner;

public class MainClass
{
public static void main(String[] argv)
{
// Chiede all'utente le dimensioni
Scanner sc1 = new Scanner(System.in);
System.out.print("Inserire la lunghezza: ");
int x = sc1.nextInt();
System.out.print("Inserire la larghezza: ");
int y = sc1.nextInt();
System.out.println("Parallelepipedo di dimensioni: " + x + " X " + y + " X 5");

Parallelepipedo par1 = new Parallelepipedo(x,y);

int a = 2;
int b = 5;
par1[a][b][1] = "prova";
}
}
Il secondo è Parallelepipedo.java ed è contenuto anch'esso nella cartella "esercizio":

package esercizio;

public class Parallelepipedo
{
private int lunghezza;
private int larghezza;

public Parallelepipedo(int a,int b)
{
lunghezza = a;
larghezza = b;
String[][][] griglia = new String[a][b][5];
}

}
Quando tento di compilare i due file ottengo il seguente messaggio d'errore:

MainClass.java:22: error: array required, but Parallelepipedo found
par1[a][b][1] = "prova";
^
1 error
Qualcuno mi può dare un mano? Dove sto sbagliando? :confused:
Ciao e grazie.

__ZERO_UNO__
20-02-2012, 21:17
Per quello che hai scritto tu par1 è una variabile oggetto di tipo Parallelepipedo non un array quindi perchè dovresti usare l'operatore []?.

Bestseller
21-02-2012, 09:02
Scusami, il codice sorgente era leggermente diverso; ora l'ho corretto quindi ti chiedo se per favore puoi rileggerlo. Scusa ancora.

Ah, quindi non devo usare l'operatore []? Quello che volevo fare scrivendo:
par1[a][b][1] = "prova";
era riempire l'oggetto, l'array tridimensionale, mettendo nel posto (2,5,1) la stringa "prova".
Quindi come dovrei fare per riempire l'array? Devo creare un metodo apposito in Parallelepipedo.java?
Grazie ancora e buona giornata. :)

banryu79
21-02-2012, 09:12
1) aggiungi in Parallelepipedo un campo di istanza "griglia";
2) aggiungi in Parallelepipedo un metodo per modificare il contenuto di "griglia";
3) nel costruttore di Parallelepipedo modifica la attuale dichiarazione di "griglia" in una inizializzazione del campo omonimo
4) in MainClass accedi e modifica la "griglia" di una istanza di Parallelepipedo tramite l'apposito metodo di istanza al punto 2.

Ora come ora il codice è sbagliato perchè:
1) nel costruttore di Parallelepipedo dichiari una variabile locale al metodo (String[][][] griglia = new String[a][b][5]) che quindi al termine del costruttore non esiste più.
2) hai applicato l'operatore [] ad un tipo che non è un array (par1 è di tipo Parallelepipedo).