Visualizzazione dei risultati da 1 a 5 su 5

Discussione: lunghezza Stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    108

    lunghezza Stringa

    Ragazzi mi potete aiutare a risolvere questo piccolo problema?
    classe Librettoesame
    codice:
    public class Librettoesame {
    	
    	int totCFU;
    	double media;
    	ArrayList<Esame> lista;
    
        public Librettoesame() {
        	lista = new ArrayList<Esame>();
        	totCFU = 0;
        	media = 0;
        }
        
        public boolean addEsame(Esame e){
        	if(lista.contains(e))
        		return false;
        		else {
        			lista.add(e);
        			return true;
        		}
        }
         public String punti(int n){
    		String s = "";
    		for(int i=0;i<n;i++)
    			s = s.concat(".");
    		return s;
    	}
    	
    	public String stampaPunti(){
    		String s = "";
    		int max = 0;
    		for(Esame e : lista){
    			if(e.getVoto() != 0){
    				int len = e.nome.length();
    				if(max == 0 || max < len)
    					max = len;
    			}
    		}
    		int n = 0;
    		for(Esame e : lista){
    			if(e.getVoto() != 0)
    				n = max - e.nome.length();
    				s = e.getNome() + punti(n);
    				if(e.getCFU() < 10)
    					s = s + "  " + e.getCFU() + " CFU - " + e.getVoto() + "/30";
    				else
    					s = s + " " + e.getCFU() + " CFU - " + e.getVoto() + "/30";
    		}
    		return s;
    	}
    }
    il praticamente ho una classe esame ed una librettoEsame...in quest'ultima come vedete c'è un metodo che deve stampare il libretto nel seguente modo:
    codice:
    PROGRAMMAZIONE.................. 12 CFU -  27/30
    MATEMATICA DEL CONTINUO......... 12 CFU -  25/30
    ARCHITETTURA DEGLI ELABORATORI I  6 CFU -  24/30
    ALGORITMI E STRUTTURE DATI...... 12 CFU -  28/30
    SISTEMI OPERATIVI I.............  6 CFU -  19/30
    BASI DI DATI.................... 12 CFU -  30/30
    LINGUAGGI FORMALI E AUTOMI......  6 CFU -  27/30
    FISICA..........................  6 CFU -  21/30
    RETI DI CALCOLATORI............. 12 CFU -  29/30
    MATEMATICA DEL DISCRETO.........  9 CFU -  25/30
    ma la mia di stampa è questa:
    codice:
    PROGRAMMAZIONE 12 CFU -  27/30
    MATEMATICA DEL CONTINUO 12 CFU -  25/30
    ARCHITETTURA DEGLI ELABORATORI I  6 CFU -  24/30
    ALGORITMI E STRUTTURE DATI...... 12 CFU -  28/30
    SISTEMI OPERATIVI I.............  6 CFU -  19/30
    BASI DI DATI.................... 12 CFU -  30/30
    LINGUAGGI FORMALI E AUTOMI......  6 CFU -  27/30
    FISICA..........................  6 CFU -  21/30
    RETI DI CALCOLATORI............. 12 CFU -  29/30
    MATEMATICA DEL DISCRETO.........  9 CFU -  25/30
    non riesco a devifinire la lunghezza massima...scorrendo la lista degli esami individua quello che ha la lunghezza maggiore ma per i primi 2 no non capisco perchè non mi mantiene fisso il valore di max

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Sei sicuro che il codice che hai postato sia quello che stai usando? Perchè quello non potrà mai produrre il risultato che hai postato tu:

    codice:
    for(Esame e : lista){
       if(e.getVoto() != 0)
          n = max - e.nome.length();
          s = e.getNome() + punti(n);
          if(e.getCFU() < 10)
             s = s + "  " + e.getCFU() + " CFU - " + e.getVoto() + "/30";
          else
             s = s + " " + e.getCFU() + " CFU - " + e.getVoto() + "/30";
    }
    return s;
    L'istruzione in grassetto, ad ogni iterazione della lista, butta via tutto quello che avevi salvato nella variabile "s" fino a quel momento... quindi, al massimo, stamperà solo i voti dell'ultimo esame.

    PS:
    codice:
    if(max == 0 || max < len)
    Non ha senso verificare che max sia uguale a 0... è sufficiente il test sulla lunghezza. Nessuna stringa potrà mai avere una lunghezza inferiore allo 0 e anche se fosse... non sarebbe maggiore di "max".

    PPS: consiglio di usare uno StringBuilder ed il relativo metodo append() piuttosto che la concatenazione di stringhe: è più efficiente.

    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
    Registrato dal
    May 2011
    Messaggi
    108
    la stampa che ho postato prima mi viene fuori da quel codice ne sono sicuro...

    per quanto riguarda il valore di max?

    ho controllato facendo dei test ed ho visto che max i primi 2 esami, che sono inferiori del 3* che il max, non considerano il valore di max...cioè è come se rifacesse da capo tutto il ciclo per controllare il valore di max...

    si ho cambiato per max == 0 grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da GianniMal
    la stampa che ho postato prima mi viene fuori da quel codice ne sono sicuro...
    Io non ho tempo ora di provarlo, ma così com'è non può per il motivo detto prima... in più non aggiungi da nessuna parte l'acapo, quindi al massimo potresti ottenere una stringa tutta appiccicata (ma, ripeto, ad ogni iterazione l'istruzione in grassetto butta via tutto quello che avevi concatenato prima...).

    per quanto riguarda il valore di max?

    ho controllato facendo dei test ed ho visto che max i primi 2 esami, che sono inferiori del 3* che il max, non considerano il valore di max...cioè è come se rifacesse da capo tutto il ciclo per controllare il valore di max...
    Il resto mi sembra anche corretto... io mi assicurerei che il codice che usi sia esattamente quello che hai postato perchè a me non pare proprio.


    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

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Stamattina ho fatto copia/incolla del codice che hai postato tu.
    Poi ho creato una classe Esame che contiene un nome, un voto e un valore CFU.
    Poi ho creato questa classe di test:

    codice:
    public class TestEsami {
       public static void main(String[] args) {
          Esame e1 = new Esame("PROGRAMMAZIONE", 27, 12);
          Esame e2 = new Esame("STORIA DELL'ARTE", 18, 5);
          Esame e3 = new Esame("ARCHITETTURA DEGLI ELABORATORI", 26, 6);
          Esame e4 = new Esame("LINGUAGGI DI PROGRAMMAZIONE I", 28, 12);
          Esame e5 = new Esame("ANALISI I", 24, 9);
    
          Librettoesame libretto = new Librettoesame();
          libretto.addEsame( e1 );
          libretto.addEsame( e2 );
          libretto.addEsame( e3 );
          libretto.addEsame( e4 );
          libretto.addEsame( e5 );
    
          String daStampare = libretto.stampaPunti();
    
          System.out.println( daStampare );
       }
    }
    Questo è il suo output:

    codice:
    ANALISI I.....................  9 CFU - 24/30
    Come già detto, infatti, viene stampato solo l'ultimo (perchè ad ogni iterazione, tutto ciò che avevi concatenato è andato perso). Quindi, come ho già detto ieri, tu non stai eseguendo il codice che hai postato.

    E' molto probabile che tu stia usando un ambiente di sviluppo (che non hai specificato). Posso ipotizzare che tu stia lanciando una compilazione + esecuzione e che vi siano degli errori in compilazione da qualche altra parte. Questo blocca la compilazione, che non va a cancellare il risultato dell'ultima compilazione andata a buon fine e l'esecuzione successiva avviene proprio con la "copia vecchia" dei compilati.

    E' solo una supposizione: accertati del motivo reale per il quale tu stai eseguendo un codice diverso da quello che hai postato.


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