Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106

    [java] domanda ereditarietà

    Ciao ragazzi avrei una domanda da porvi...allora ho 2 classi Ascensore e Colonna. In Ascensore utilizzo solo una volta un metodo di colonna e per comodita non vorrei mettere nei campi un riferimento a Colonna quindi ho deciso di far diventare Ascensore sottoclasse di Colonna.
    Il problema che in compilazione mi viene restituito l'errore cannot find symbol(alla riga del costruttore di Ascensore).....vorrei sapere se mi appare tale errore perchè se estendo una classe devo per forza richiamare (attraverso super) qualcosa della superclasse...sarà per questo?
    Oppure io posso estendere una classe senza richiamare nulla della superclasse??
    Io pensavo fosse cosi, pero' mi è venuto il dubbio perchè non trovo errori di scrittura nelle classi

  2. #2
    Puoi benissimo estendere una classe senza mai invocare nulla della sua superclasse, anche se ciò potrebbe avere poco senso. Nel tuo caso, almeno logicamente, non vedo alcuno nesso tra una classe Colonna ed una classe Ascensore, per cui potrebbe essere logicamente errata una eventuale ereditarietà.
    Comunque posta lo stacktrace dell'eccezione e magari un po' di codice.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Così senza codice non si può dire, non resta che provare a indovinare.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    ti posto il tutto:
    Ascensore
    codice:
    import java.util.Vector;
    
    public class Ascensore extends Colonna
    {
    	private int PesoMax;
    	private int PersoneMax;
    	private Vector<Persona> vett;
    
    
    	public Ascensore(int a, int b)
    	{
    		PesoMax = a;
    		PersoneMax = b;
    		vett = new Vector<Persona>();
    	}
    
    	public boolean sale(Persona p)
    	{
    		if(vett.size() < PersoneMax && (getPesoTot() + p.getPeso() <= PesoMax))
    		{
    			vett.add(p);
    			return true;
    		}
    		else
    			return false;
    	}
    
    	//Scende una persona dall'ascensore se la destinazione è uguale al piano
    	public void scende(Persona p)
    	{
    		if(vett.contains(p) && (p.destinazione() == nrPiano())) // <- met. di colonna
    		{
    			for(Persona i: vett)
    				if(i.equals(p))
    					vett.remove(p);
    		}
    		else
    			System.out.println("Persona non presente");
    	}
    
    	public Vector<Persona> getVettPersona()
    	{
    		return vett;
    	}	
    
    	public int getPesoTot()
    	{
    		int kg = 0;
    		for(Persona i: vett)
    			kg = kg + i.getPeso();
    		return kg;
    	}
    			
    	public String toString()
    	{
    		return "Ascensore con "+vett.size()+" persone per un peso tot di "+getPesoTot();
    	}	
    
    }
    Colonna
    codice:
    import java.util.Vector;
    
    public class Colonna
    {	
    	private Ascensore elevatore;
    	private Piano[] livello;
    	private int pianoCorrente;
    	
    	public Colonna(Ascensore a, Piano[] b)
    	{
    		elevatore = a;		
    		livello = b;
    		pianoCorrente = 0;
    	}
    	
    	public void muoviAscensore(int prossimoPiano)
    	{
    		pianoCorrente = prossimoPiano;
    	}
    	
    	public Piano piano()
    	{
    		return livello[pianoCorrente];
    	}
    
    	public int nrPiano()
    	{
    		return pianoCorrente;
    	}
    	
    	public void movimentePersone()
    	{
    		//Scendono dall'ascensore
    		for(Persona i: elevatore.getVettPersona())
    			elevatore.scende(i);
    		//Salgono sull'ascensore
    		for(Persona i: piano().getVettPiano())
    		{
    			if(elevatore.sale(i));
    			System.out.println("Persona salita in ascensore");
    		}
    	}
    }
    Piu le 2 classi per compilare
    codice:
    public class Persona
    {
    	private int destinazione;
    	private int peso;
    
    	public Persona(int a, int b)
    	{
    		destinazione = a;
    		peso = b;
    	}
    	
    	public int destinazione()
    	{
    		return destinazione;
    	}
    
    	public int getPeso()
    	{
    		return peso;
    	}
    
    }
    codice:
    import java.util.Vector;
    public class Piano
    {
    	private Vector<Persona> inAttesa;
    
    	public Piano()
    	{
    		inAttesa = new Vector<Persona>();
    	}
    		
    	public Vector<Persona> getVettPiano()
    	{
    		return inAttesa;
    	}
    
    	public void aggiungi(Persona p)
    	{
    		inAttesa.add(p);
    	}
    		
    	public Persona persona(int i)
    	{
    		return inAttesa.get(i);
    	}
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    il problema riguarda il metodo nrPiano(), ce l'ho bisogno in ascensore per vedere se il piano corrente è uguale al piano dove la persona sull ascensore vuole scendere.....ora per non mettere nel campo di ascensore un riferimento di Colonna, ho fatto estendere Ascensore a Colonna..

  6. #6
    codice:
    public class Colonna
    {	
    	private Ascensore elevatore;
    	private Piano[] livello;
    	private int pianoCorrente;
    	
    	public Colonna(Ascensore a, Piano[] b)
            ....
    Se Ascensore estende Colonna non puoi avere un'istanza di Ascensore all'interno della classe Colonna.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    106
    A cavolo...pero è essenziale quella cosa....quindi a questo punto l'unico modo è mettermi un campo di Colonna in Ascensore....non ho altro modo per richiamare un metodo di Colonna...giusto?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.