Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problema metodo java

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86

    problema metodo java

    Salve a tutti sto cercando d'implementare un metodo java che aggiunga una commissione ad un conto bancario dopo aver terminato le 10 commissioni gratis disponibili e che sottragga il costo delle commissioni solo il 30 di ogni mese. Purtroppo il codice non funziona se applico questo metodo. Qualcuno può fare chiarezza sul mio errore ?
    codice:
    import java.util.*;
    public class BankAccount 
    {
    	//COSTRUTTORE 
    	/*costruisce un saldo uguale a zero */
    	public BankAccount()
    	{
    		
    		balance = 0;
    	}
    	
    	/*costruisce un saldo predefini
    	 * @param  balance saldo
    	 * @assert saldo !=0
    	 */
        public BankAccount(double newbalance)
        {
        	balance = newbalance;
        }
    	///METODI
    	/* metodo per il deposito del denaro
    	 * @param amount il saldo da depositare
    	 * @assert ammontare maggiore di zero
    	 */
        
        
    	
    	public void deposit(double amount)
    	{
    		assert amount > 0 : "IL DEPOSITO DEV'ESSERE UN NUMERO MAGGIORE DI ZERO " + amount;
    		double newbalance = this.balance + amount;
    		this.balance = newbalance;
    		
    	}
    	
    	/* metodo per il prelievo 
    	 * @param amount saldo da prelevare
    	 * @assert il bilancio dev'essere > 0
    	 */
    	public void withdraw(double amount)
    	{
    		assert this.balance > 0 : " PER POTER PRELEVARE IL BILANCIO DEV'ESSERE UN NUMERO MAGGIORE DI ZERO " + this.balance;
    		double newWithdraw = this.balance - amount;
    		this.balance = newWithdraw;
    	}
    	
    	/*metodo per aggiungere gli interessi 
    	 * @param amount l'ammontare degli interessi
    	 */
    	
    	public void addinterest(int interest)
    	{
    		double newinterest = (this.balance * interest) / 100;
    		this.balance = this.balance + newinterest;
    	}
    	
    	/* il bilancio del conto
    	 * @return balance
    	 */
    	
    	
    	public double getBalance()
    	{
    		return this.balance;
    		
    	}
    public void numeroCommissione(double numcom)
    	{
    		//ORA CALENDAR RAPPRESENTA IL 30 ESIMO GIORNO
    		GregorianCalendar calendario = new GregorianCalendar();
    		calendario.add(Calendar.DAY_OF_MONTH, 2);
    		
    		//costo di ogni commissioni
    		double costocommissione = 100;
    		//numero commissioni gratis
    		double gratis = 10;
    		
    		double  newnumcom = numcom;
    		
    		//se il numero delle commissioni è maggiore di gratis cioè 
                      terminano le transazioni gratis disponibili entra nel secono ramo if
    		if (newnumcom > gratis)
    		{
    			//se è il 30esimo giorno del mese applica le commissioni
    			if(Calendar.DAY_OF_MONTH == 30)
    		 	{
    				double tot = (newnumcom - gratis);
    				balance = balance - (costocommissione*tot); 
    				
    		 	}
    			//altrimenti aggiungi il numero di commissioni.
    			else 
    			newnumcom++;
    		}
    		//altrimenti sottrai il numero delle transazioni gratis fino a terminare le transazioni gratis
    		else
    			gratis--;
    		
    			
    	}

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    "Non funziona" in che senso? Ti genera una eccezione? Ha un comportamento imprevisto? Se non segnali i dettagli dell'anomalia che riscontri diventa difficile aiutarti.

    Comunque, da quel che vedo dal codice, faresti meglio a rivedere il metodo numeroCommissione(): non si capisce se deve aggiornare il bilancio a fine mese o se deve aggiungere una nuova commissione. Il risultato, comunque, è che non fa nessuna delle due cose.
    Fra le altre cose:
    - non capisco perchè definisci il numero di commissioni come un double, invece che come integer: questo avviene sia nel parametro del metodo numeroCommissione(), sia con le variabili "gratis" e "tot". Non ha molto senso;
    - per avere il giorno del mese di un GregorianCalendar devi fare

    codice:
    calendar.get(Calendar.DAY_OF_MONTH);
    Sennò ottieni solo il valore del flag (EDIT: mi sono espresso male: della "costante", volevo dire) utilizzato internamente dalla classe per identificare il campo del giorno del mese;
    - puoi aggiungere (a "newnumcom") e sottrarre (a "gratis") quanto ti pare... ma se questi valori li memorizzi in variabili locali non potrai più disporne dopo la terminazione del metodo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    86
    grazie per la rispota cmq Il metodo numeroCommissione sottrae denaro dal conto corrente ogni volta che vengono superate le 10 transazioni gratis mensili. Il costo delle commissioni (dopo aver superato le 10 gratis ) non viene calcolato ad ogni transazione ma ogni 30 del mese. Ho aggiornato il codice con i suggerimenti che mi hai detto e ora funziona. grazie delle dritte!
    codice:
    public void numeroCommissione(int numcom)
    	{
    		//ORA CALENDAR RAPPRESENTA IL 30 ESIMO GIORNO
    		GregorianCalendar calendario = new GregorianCalendar();
    		calendario.add(Calendar.DAY_OF_MONTH, 1);
    		
    		//costo di ogni commissioni
    		int costocommissione = 100;
    		//numero commissioni gratis
    		int gratis = 10;
    						
    		//se il numero delle commissioni è gratis entra nel secono ramo if
    		if (numcom > gratis)
    		{
    			//se è il 30esimo giorno del mese applica le commissioni
    			if(calendario.get(Calendar.DAY_OF_MONTH)== 30)
    		 	{
    				int tot = (numcom - gratis);
    				balance = balance - (costocommissione*tot); 
    				
    		 	}
    			//altrimenti aggiungi il numero di commissioni.
    			else 
    			numcom++;
    		}
    		//altrimenti sottrai il numero delle transazioni gratis fino a terminare le transazioni gratis
    		else
    			gratis--;
    		
    			
    	}

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    In realtà... non funziona.
    Come ti ho detto, le variabili "numcom" e "gratis" sono locali: alla fine del metodo le (rispettivamente) incrementi e decrementi, ma questa modifica non viene memorizzata da nessuna parte e pertanto, così com'è, risulta perfettamente inutile.

    A me sembra che ci sia qualcosa che non torna: questo metodo viene invocato ad ogni transazione che esegui, oppure una volta sola a fine mese, quando devi tirare le fila del bilancio?

  5. #5
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Bah...

    Codice PHP:
    GregorianCalendar calendario = new GregorianCalendar();
    calendario.add(Calendar.DAY_OF_MONTH1); 
    Questo aggiunge un giorno alla data attuale rappresentata nell'oggetto Calendar. Non mi è chiaro perché..

    Codice PHP:
    //costo di ogni commissioni
    int costocommissione 100;
    //numero commissioni gratis
    int gratis 10
    queste le definisci nel metodo, ma sembrano tanto delle costanti da definire a livello di classe. Nulla di particolare, comunque.


    Codice PHP:
    //se il numero delle commissioni è gratis entra nel secono ramo if
    if (numcom gratis)
    {
        
    //se è il 30esimo giorno del mese applica le commissioni
        
    if(calendario.get(Calendar.DAY_OF_MONTH)== 30)
         {
                
    int tot = (numcom gratis);
                    
    balance balance - (costocommissione*tot); 
                    
            }
            
    //altrimenti aggiungi il numero di commissioni.
            
    else 
                
    numcom++;

    Se ci sono commissioni da pagare entri qui, se è il 30 aggiorni il bilancio del cliente, altrimenti aggiorni il numero delle commissioni.
    Però mi aspetterei anche un azzeramento delle commissioni una volta che gliele hai fatte pagare...

    Codice PHP:
    //altrimenti sottrai il numero delle transazioni gratis fino a terminare le transazioni gratis
    else
        
    gratis--; 
    questo non serve a nulla perché gratis ha ciclo di vita solo nel metodo, e la prossima volta che invocherai il metodo, gratis sarà di nuovo a 10.
    Eppoi mi sembra corretto far pagare al cliente il numero di commissioni fatte - il numero di commissioni gratis, quindi questo decremento proprio non lo capisco.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Questo aggiunge un giorno alla data attuale rappresentata nell'oggetto Calendar. Non mi è chiaro perché..
    Questo l'ho capito io: oggi è il 29 settembre, vuole simulare che la data sia il 30.
    E se posso aggiungere: per fare i test era decisamente molto più comodo costruire il GregorianCalendar con una data costante (anzichè dover cambiare il valore della add() ogni giorno), ma tant'è. In ogni caso, domani è il 30...

    Per tutte le altre questioni che hai sollevato... beh, sono in attesa di sapere anch'io

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.