Più grande in assoluto

di il
5 risposte

Più grande in assoluto

Salve a tutti, devo trovare il lato più lungo in assoluto... io so come si trova il lato più lungo di tutte le figure, e lo ho fatto in tale modo:

File di input:

Triangolo,2,(0,0),(0,1),(2,0)
Rettangolo,3,(10,10),(10,20),(20,20),(20,10)

Nel Main : Dove Figura è la mia classe e figure è un ArrayList di Figura(lista di contenente tutte le singole figure)

PrintWriter pw1 = new PrintWriter (new FileWriter ("1.txt"));
		double max=0;
		for(Figura f4 : figure){
			if(f4.distanza()>max)
				max=f4.distanza();
				pw1.println(f4.nome+f4.id+" ----> "+max);
		}
		pw1.close();
E nella classe Figura:

public double distanza(){
		double distanza=0;
		for(int i=0;i<lati.size()-1;i++){ //-1 xk i parte da 0 mentre size parte a contare da 1 (ci dice il numero di elementi)
			double distanza1 = Math.sqrt(Math.pow(lati.get(i+1).y-lati.get(i).y, 2)+
					Math.pow(lati.get(i+1).x-lati.get(i).x, 2));
				distanza=distanza1;
		}
		double distanza1 = Math.sqrt(Math.pow(lati.get(0).y-lati.get(lati.size()-1).y, 2)+
				Math.pow(lati.get(0).x-lati.get(lati.size()-1).x, 2));
			distanza=distanza1;
				return distanza;
	}
Ora, Ho trovato per ogni figura il lato più lungo... ma per trovare il lato più lungo in assoluto? Potrei brutalmente fare un ulteriore For dentro quello già fatto nel main e trovare il massimo tra i massimi...ma sarebbe la soluzione più "compatta" e migliore? Altro non mi viene in mente

5 Risposte

  • Re: Più grande in assoluto

    Anto11796 ha scritto:


    
    			if(f4.distanza()>max)
    
    Partiamo da un aspetto: un metodo distanza() detto così con questo nome, semplicemente NON ha senso.

    Avrebbe senso se Figura avesse un metodo chiamato: latoMaggiore() che restituisce la lunghezza del lato più lungo. Chiaramente andando a calcolare i vari lati (dai vertici) e trovando quello più lungo che poi restituisce.

    E se "a monte" vuoi il lato più lungo di tutte le figure, a tua volta farai una iterazione sulle figure, invochi latoMaggiore() su ciascuna e vai a determinare quello più lungo.
  • Re: Più grande in assoluto

    Ok, quindi mi conviene partire dalla classe Figura andando già là a fare una "selezione" prendendo il lato più lungo, dopodichè essenzialmente replico il procedimento svolto da me nel main ma andando a chiamare il metodo che ho creato nella classe
    Capito, grazie!
  • Re: Più grande in assoluto

    Anto11796 ha scritto:


    Ok, quindi mi conviene partire dalla classe Figura andando già là a fare una "selezione" prendendo il lato più lungo, dopodichè essenzialmente replico il procedimento svolto da me nel main ma andando a chiamare il metodo che ho creato nella classe
    Sì. E inoltre, NON sparpagliare Math.pow/Math.sqrt dappertutto. Basterebbe che Figura avesse un metodo es.

    public double getLato(int indice)

    Se hai N (N>1) vertici, hai N lati. Quindi è banale, con un minimo di "logica", dare in uscita il lato i-esimo.
    E questo getLato() lo usi nel latoMaggiore() (o getLatoMaggiore() ... come vuoi chiamarlo).
  • Re: Più grande in assoluto

    Purtroppo ho capito il ragionamento ma non riesco a metterlo in pratica per quanto riguarda fare la selezione del lato maggiore già nella classe Figura, riusciresti a darmi una mano?
  • Re: Più grande in assoluto

    Anto11796 ha scritto:


    Purtroppo ho capito il ragionamento ma non riesco a metterlo in pratica per quanto riguarda fare la selezione del lato maggiore già nella classe Figura, riusciresti a darmi una mano?
    La classe dei vertici ha già un metodo distanzaDa (ricordi l'altra discussione?) ? Se sì, è già un aiuto.

    In figura fai un getLato(int indice), che prende 2 vertici e restituisce la distanza. Un vertice è a indice e l'altro a indice+1 (e attenzione, per l'ultimo è 0 !).

    Poi in es. getLatoMaggiore() banalmente fai un for da i=0 fino all'ultimo vertice e usi getLato() per trovare il lato maggiore.
Devi accedere o registrarti per scrivere nel forum
5 risposte