Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente bannato
    Registrato dal
    Nov 2008
    Messaggi
    9

    Problema con esercizio classi e oggetti

    Ciao a tutti, ora vi spiego il mio problema, praticamente ho problemi nelllo sviluppare il codice di saldoTitolare e di saldoPiuAlto.
    Ciao e grazie anticipatemente dell'aiuto.
    In saldoTitolare mi viene restituito questo errore: C:\Documents and Settings\gianni\Desktop\gianni\java uni\Esame\ContoCorrente.java:49: missing return statement
    }
    codice:
     /** Classe ContoCorrente: descrive un conto corrente*/
    
    public class ContoCorrente {
    
    	private int numero;
    	private Persona [] titolari;
    	private int saldo;
    
     /** Costruttore */
      public ContoCorrente(int numero, Persona [] titolari, int saldo) {
    
    		this.numero = numero;
    		this.titolari = titolari;
    		this.saldo = saldo;
      }
    
     public String toString(){
    	  String testo = "cc: " + numero + " Saldo: "+ saldo+ " \n intestato a: \n";
    	  for (int i=0; i<titolari.length; i++)
    	  	testo +=titolari[i].toString()+"\n";
    	  return testo;
      }
    
    /**
    	Implementare il metodo
    
      		public int saldoTitolare (Persona p)
    
      che restituisce il saldo di questo conto corrente se la persona "p" e' uno dei titolari
      del conto corrente stesso; altrimenti, quando la persona "p" non e' uno dei titolari
      di questo conto corrente, il metodo restituisce -1.
    
    */
    
      public int saldoTitolare (Persona p){
    	  /*implementare il metodo*/
    	 int i;
    	 for(i=0; i < titolari.length; i++){
    	if (titolari[i].getCognome().equals(p.getCognome())){
    	 saldo = this.saldo; //non so cosa bisognerebbe mettere
    	 return saldo;
    	 }
    	 else return -1;
    }
    	 }
    
    	 }
    codice:
    public class EsameContoCorrente {
    
    	public static void main(String[] args) {
    
    		Persona [] v1 = new Persona [2];
    		v1[0] = new Persona("Mario", "Rossi");
    		v1[1] = new Persona("Luca", "Bianchi");
    
    		Persona [] v2 = new Persona[1];
    		v2[0] = new Persona("Italo", "Verdi");
    
    		Persona [] v3 = new Persona [3];
    		v3[0] = new Persona("Giacomo", "Gialli");
    		v3[1] = new Persona("Filippo", "Violetti");
    		v3[2] = new Persona("Emanuele", "Marroni");
    
    
    		ContoCorrente [] banca = new ContoCorrente[3];
    		banca[0] = new ContoCorrente(123, v1, 1230);
    		banca[1] = new ContoCorrente(234, v2, 1343);
    		banca[2] = new ContoCorrente(345, v3, 905);
    
    
    
    		for (int i=0; i<banca.length; i++)
    			System.out.println(banca[i]);
    		System.out.println();
    
    
    //      L'array di stringhe, chiamato "cognomi", deve essere riempito
    //		con 5 cognomi.
    
    		System.out.println("Inserisci un 5 elenco di cognomi");
    		String[] cognomi = ArrayUtil.readStringArray();
    
    		Persona [] amici = new Persona[5];
    		amici[0] = new Persona("Mario", cognomi[0]);
    		amici[1] = new Persona("Luca", cognomi[1]);
    		amici[2] = new Persona("Italo", cognomi[2]);
    		amici[3] = new Persona("Filippo", cognomi[3]);
    		amici[4] = new Persona("Emanuele", cognomi[4]);
    
    
    		int piuAlto = saldoPiuAlto(banca, amici);
    		if (piuAlto==-1) System.out.println("Nessuna delle persone inserite ha un conto in banca");
    		else System.out.println("Tra le persone inserite, il saldo piu alto e' "+ piuAlto);
    
    	}//main
    
    
    
    
    	/**Implementare il metodo
    
    	public static int saldoPiuAlto(ContoCorrente[] conti, Persona [] titolari)
    
    	che restituisce il saldo piu' alto fra i conti correnti in "conti" che sono intestati
    	ad almeno uno delle persone in "titolari". Se nessuno dei conti correnti in "conti" e'
    	intestato a persone in "titolari" il metodo restituisce -1.
    
    	Utilizzare il metodo saldoTitolare (da implementare nella classe ContoCorrente) per stabilire
    	il saldo di un conto corrente intestato ad una data persona.
    
    	*/
    	public static int saldoPiuAlto(ContoCorrente[] conti, Persona [] titolari){
    		/* sviluppare il codice del metodo */
    	int i;
    	int max = conti[i];
    	for(i=0; i < conti.length; i++) {
    		if(conti[i].saldoTitolare(cognome))
    		if (conti[i] > max) max = conti[i];
    	return max;
    	}
    }
    codice:
    /** Classe Persona: descrive persone.
     */
    
    public class Persona {
    
    	private String nome;
    	private String cognome;
    
     /** Costruttore di Default vuoto */
      public Persona() {
    
    		nome = " ";
    		cognome =" ";
      }
    
     /** Costruttore con parametri*/
      public Persona(String nomeP,String cognomeP) {
    		nome = nomeP;
    		cognome = cognomeP;
      }
    
      public String getNome () {
    		return nome;
      }
    
      public String getCognome() {
    	  return cognome;
      }
    
      public String toString() {
    	  return "Nome : " + nome + " Cognome : " + cognome;
      }
    
    
    
    
    }// fine definizione classe

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Missing return statement: il compilatore non è riuscito a trovare l'istruzione return per un metodo con tipo di ritorno.

    Questo è dovuto alla "non corretta" implementazione del metodo.

    Quando hai a che fare con metodi che ritornano qualcosa è bene adottare un paradigma di programmazione più ferreo:

    Questi due codici, ad esempio, sono esattamente equivalenti:

    Codice 1:
    codice:
    public int metodo() {
       if ( condizione ) {
          return 10;
       } else {
          return 20;
       }
    }
    Codice 2:
    codice:
    public int metodo() {
       int risultato = -1;
    
       if ( condizione ) {
          risultato = 10;
       } else {
          risultato = 20;
       }
    
       return risultato;
    }
    Ma il secondo, oltre ad essere più stilisticamente bello, più manutenibile e più filosoficamente corretto, è anche sintatticamente più gradito dal compilatore.

    Questo perchè il compilatore non può sapere a priori che uno dei due rami del costrutto IF verrà sicuramente eseguito e non è in grado, quindi, di essere sicuro che venga eseguita una delle due istruzioni return (evidentemente, questo comporterebbe un overhead da parte del compilatore, che ne peggiorerebbe le performances).

    Consiglio spassionato: usa sempre la seconda forma, e avrai meno problemi a gestire codici complessi (ricorda che una funzione, anche in matematica, è una regola che associa ad uno o più valori, uno ed un solo valore. Quindi in una funzione ci deve essere sempre uno ed un solo return).

    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 bannato
    Registrato dal
    Nov 2008
    Messaggi
    9
    Ciao grazie delle "dritte", per quanto riguarda saldoTitolare per adesso l'ho modificato così e non mi restituisce più errori.

    codice:
      public int saldoTitolare (Persona p){
    	  /*implementare il metodo*/
    	 int temp = 0;
    	 int i;
    	 for(i=0; i < titolari.length; i++){
    	if (titolari[i].getCognome().equals(p.getCognome())){
    	 temp = saldo;
    	} else {
    		temp = -1;
    }
    }
    return temp;
    }
    }
    Ma in questo modo acquisisco il valore del saldo ?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da gianni09
    Ma in questo modo acquisisco il valore del saldo ?
    NI'... il metodo restituisce il valore della variabile di classe "saldo" se e solo se la Persona passata come parametro è l'ultima nella lista dei titolari... non credo che sia ciò che tu vuoi ottenere...

    Quel metodo andrà implementato in modo diverso:
    codice:
    temp = -1;
    for(i=0; i < titolari.length; i++){
       if (titolari[i].getCognome().equals(p.getCognome())){
          temp = saldo;
       }
    }
    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
    Utente bannato
    Registrato dal
    Nov 2008
    Messaggi
    9
    Ok grazie... Per quanto riguarda saldoPiuAlto sono due cicli giusto ? E poi non ho proprio ben capito come devo procedere per implementare questo metodo.
    Ciao e grazie

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.