gestioneMagazzino in java

motocross'88

Nuovo Utente
26 Ott 2009
17
0
0
Ciao a tutti. sono alle prese con un nuovo problema che può essere espresso cosi: L’oggetto Magazzino è caratterizzato come denominazione dall’indicazione della sua ubicazione (Brescia, Como, ...); da una capienza massima e da una capienza minima definite dal collaudatore dell’impianto per il corretto funzionamento. Sul magazzino è possibile fare delle operazioni di carico e scarico che devono rispettare i vincoli strutturali. Non è possibile fare carichi e scarichi parziali. (Es. CapMax=100, CapCor=80 se cerco di caricare 50 non carico solo i 20 che rispettano il vincolo ma scarto completamente l’operazione di carico)….Si vuole realizzare un applicativo gestioneMagazzino che permette la gestione dei magazzini ubicati in due province. Tramite struttura a menu si deve permettere:
1) Inizializzazione magazzini
2) Visualizzazione dati tecnici di entrambi i magazzini
3) Determinazione del magazzino con CapMax maggiore
4) Carico merce (dato il magazzino che si desidera e controllando il buon esito dell’operazione)
5) Scarico merce (dato il magazzino che si desidera e controllando il buon esito dell’operazione)
Ho cominciato con la creazione di due classi (Magazzino e gestioneMagazzino) e adesso sono al punto due (case 2 del menu, perchè il primo funziona) e non so come richiamare i dati che mi interessano, perchè mi da errori del tipo method non-static richiamato da static....qualche suggerimento su come risolvere il problema?
grazie!!!
Codice:
import unibs.eco.dmq.basicIO.*;
public class gestioneMagazzino {
 public static void main(String[] args) {
         int opzione; 
         do{
         	Scrittore.video.println("---------------------");
         	Scrittore.video.println("1* Inizializzazione magazzini");
         	Scrittore.video.println("2* Dati tecnici dei magazzini");
         	Scrittore.video.println("3* Magazzino con CapMax maggiore");
         	Scrittore.video.println("4* Carico merce");
         	Scrittore.video.println("5* Scarico merce");
         	Scrittore.video.println("0* USCITA");
         	Scrittore.video.println("---------------------");
         	opzione=Lettore.tastiera.leggiInt();    
           	switch(opzione){
          		case 1:;
          		Magazzino m1 = new Magazzino("Como",90,10,5); 
          		Magazzino m2 = new Magazzino("Brescia",100,5,20);
          		Scrittore.video.println("I magazzini creati si chiamano");
          		Scrittore.video.println(m1.nome +" e "+ m2.nome);
          		Scrittore.video.println("\n dati tecnici: \n capienza minima e massima del negozio di " +m1.getNome()+" e' "+m1.getcapienzaMin()+ " e "+m1.getcapienzaMax() +" \n capienza minima e massima del negozio di " +m2.getNome()+" e' "+m2.getcapienzaMin()+ " e "+m2.getcapienzaMax());		
           		break;
       		case 2:
       							
          		break;	
		case 3: 
				
          		break;
	}   		
          }while(opzione!=0);
        }
     }

e il Magazzino
Codice:
import unibs.eco.dmq.basicIO.*;  
class Magazzino{
    public String nome;
    public int capienzaMax; 
    public int capienzaMin;
    public int quantitaCorrente;     
    public Magazzino(String nome, int capienzaMax, int capienzaMin,int quantita){
    	this.nome=nome;
    	this.capienzaMax=capienzaMax;
    	this.capienzaMin=capienzaMin;
    	this.quantitaCorrente=quantitaCorrente;
    }    

  public int getcapienzaMax(){ 
  	return capienzaMax;
  }
  public int getcapienzaMin(){ 
  	return capienzaMin;
  }  
  public int getquantitaCorrente() {
   	return quantitaCorrente;
  }
  public void aumentaquantitaCorrente( int q ) {
    quantitaCorrente = quantitaCorrente + q;
  }
  public void diminuisciquantitaCorrente( int q ) {
    quantitaCorrente = quantitaCorrente - q;
  }
  public String getNome() { 
  	return nome;
  }
}
 
Il metodo main è statico per cui non puoi istanziare oggetti di tipo Magazzino ed accedere direttamente agli attributi pubblici non statici.
Prova a modificare la classe gestioneMagazzino in questo modo:

Codice:
import unibs.eco.dmq.basicIO.*;
public class gestioneMagazzino {

	public gestioneMagazzino() {
         int opzione; 
         do{
         	Scrittore.video.println("---------------------");
         	Scrittore.video.println("1* Inizializzazione magazzini");
         	Scrittore.video.println("2* Dati tecnici dei magazzini");
         	Scrittore.video.println("3* Magazzino con CapMax maggiore");
         	Scrittore.video.println("4* Carico merce");
         	Scrittore.video.println("5* Scarico merce");
         	Scrittore.video.println("0* USCITA");
         	Scrittore.video.println("---------------------");
         	opzione=Lettore.tastiera.leggiInt();    
           	switch(opzione){
          		case 1:;
          		Magazzino m1 = new Magazzino("Como",90,10,5); 
          		Magazzino m2 = new Magazzino("Brescia",100,5,20);
          		Scrittore.video.println("I magazzini creati si chiamano");
          		Scrittore.video.println(m1.nome +" e "+ m2.nome);
          		Scrittore.video.println("\n dati tecnici: \n capienza minima e massima del negozio di " +m1.getNome()+" e' "+m1.getcapienzaMin()+ " e "+m1.getcapienzaMax() +" \n capienza minima e massima del negozio di " +m2.getNome()+" e' "+m2.getcapienzaMin()+ " e "+m2.getcapienzaMax());		
           		break;
       		case 2:
       							
          		break;	
		case 3: 
				
          		break;
	}   		
          }while(opzione!=0);
	}
	
 public static void main(String[] args) {
 	new gestioneMagazzino();
      }
}

Inoltre, per rispettare lo standard Java i nomi delle classi dovrebbero iniziare com lettere maiuscole (GestioneMagazzino) e non dovresti dichiarare pubblici gli attributi della classe, a meno di particolari necessità. Per cui rendi privati o eventualmente protetti gli attributi della classe Magazzino ed accedi ad essi tramite i rispettivi metodi getter e setter (m2.getNome()).
 
si satifal, ti ho capito...però se voglio mettere una scritta al case2 del tipo Scrittore.video.print(m1.getNome() ); mi dice che la variabile m1 non è stata inizializzata!
ho provato anche a creare una var String nome; la quale la richiamavo cosi semmai nome=m1.getNome(); ma non funge neanche cosi...
 
Ovviamente se tenti di accedere all'istanza m1 all'interno del case 2 ti darà errore in quanto l'oggetto viene istanziato nel case 1 il cui codice non viene eseguito.
Per ovviare a questo problema dovresti istanziare gli oggetti fuori dallo switch.
 
Ultima modifica:

Discussioni simili