Programmino java (Contobancario)

di il
9 risposte

Programmino java (Contobancario)

Salve a tutti premetto che sono neofita della programmazione con questo linguaggio...per fare pratica volevo fare questo piccolo programmino dove si possono effettuare versamenti, prelievi, vedere il saldo e vedere le ultime 5 transizioni fatte.
Funziona tutto tranne la parte fondamentale l'azione del prelievo e del versamento.
Questo è il mio codice:
public class CC{
	int contocorr;
	int a[]=new int[5];
	public void versamento(int soldi, int i){
		this.contocorr=this.contocorr + soldi;
		a[i%5]=+soldi;
	}
	public void prelievi(int soldi, int i){
		this.contocorr=this.contocorr - soldi;
		a[i%5]=-soldi;
	}
}
import java.util.*;

public class Banca{
	public static void main(String[] args){
		Scanner h= new Scanner(System.in);
		String mossa=new String();
		char c;
		int somma;
		int m=-1;
		int i;
		CC b=new CC();
		do{
			m++;
			System.out.println("v-versamento");
			System.out.println("p-prelievo");
			System.out.println("s-saldo");
			System.out.println("l-lista ultimi 5 movimenti");
			System.out.println("x-exit");
			mossa=h.nextLine();
			c=mossa.charAt(0);
			switch (c){
				case 'v':
					System.out.println("somma da versare");
					somma=h.nextInt();
					b.versamento(somma,m);
					break;
				case 'p':
					System.out.println("somma da prelevare");
					somma=h.nextInt();
					b.prelievi(somma,m);
					break;
				case 's':
					System.out.println("Saldo = " + b.contocorr);
					break;
				case 'l':
					i=0;
					int j=1;
					while(i<5){
						System.out.println(j + " - " + b.a[i] + "\n");
						j++;
						i++;
					}
					break;
				case 'x':
					System.out.println("EXIT");
					break;
			}
		}while(c!='x');
	}
}
Questo è invece il messaggio di errore che mi da la macchina virtuale a tempo di esecuzione:
v-versamento
p-prelievo
s-saldo
l-lista ultimi 5 movimenti
x-exit
v
somma da versare
9
v-versamento
p-prelievo
s-saldo
l-lista ultimi 5 movimenti
x-exit
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at Banca.main(Banca.java:20)
Ho anche visto se prendeva il valore in input e se lo passava nell'array e funziona solo che dopo non mi fa proseguire...qualcuno sa dirmi dove sbaglio??
Grazie buona serata

9 Risposte

  • Re: Programmino java (Contobancario)

    Il problema si verifica quando effettui la "h.nextInt()". In quel caso, infatti, lo Scanner legge solamente il numero, tralasciando il carattere di ritorno a capo ("\n"), che viene letto all'iterazione successiva dalla "h.nextLine()". Dato che però quest'ultima funzione elimina automaticamente il carattere "\n", la stringa che viene salvata dentro alla variabile "mossa" è la stringa vuota (di lunghezza 0), da cui l'errore quando cerchi di estrarne il primo carattere.

    La soluzione veloce è quella di fare una "h.nextLine()" ogni volta che fai una "h.nextInt()".
  • Re: Programmino java (Contobancario)

    Dal punto di vista del "design" delle classi, purtroppo NON va affatto bene.
    Non dovresti passare quel int i ai due metodi di CC. Non è chi "usa" CC che deve sapere di dover passare un indice! È un po' come se tu andassi in banca a depositare un assegno e dicessi all'impiegato che hai davanti "guardi, deve mettere l'assegno nel secondo cassettino sulla sinistra". Lo saprà la banca (e il personale) cosa fare ..... no?

    Questo vuol dire che il mantenimento della "storia" degli ultimi 5 movimenti va fatto diversamente e meglio.
    Inoltre non è nemmeno buono accedere dall'esterno ai campi dell'oggetto CC.
  • Re: Programmino java (Contobancario)

    Grazie mille per le vostre risposte arrivate così velocemente
    ripeto sono nuovo del linguaggio quindi sono anche duro a capire ahahah

    Per Della: ok ma come c'è un modo per fare in maniera più pulita l'inserimento su un intero? O quella che mi hai detto te è la procedura standard?

    Per andbin: sono alla base e ho provato a fare un programma del genere che forse per la mia esperienza era ancora troppo presto ahahah se non ti scoccia mi faresti vedere in pratica ciò che mi hai detto? perchè non penso di aver capito...cioè dovrei mettere un private int i nell'oggetto e poi al momento dell'inserimento faccio a[this.i%5] così da non farlo passare come argomento dal main?
  • Re: Programmino java (Contobancario)

    Ho provato a cambiare un po' di cose...meglio?
    import java.util.*;
    
    public class Banca{
    	public static void main(String[] args){
    		Scanner h= new Scanner(System.in);
    		String mossa=new String();
    		char c;
    		int somma;
    		int i;
    		CC b=new CC();
    		do{
    			System.out.println("v-versamento");
    			System.out.println("p-prelievo");
    			System.out.println("s-saldo");
    			System.out.println("l-lista ultimi 5 movimenti");
    			System.out.println("x-exit");
    			mossa=h.nextLine();
    			c=mossa.charAt(0);
    			switch (c){
    				case 'v':
    					System.out.println("somma da versare");
    					somma=h.nextInt();h.nextLine();
    					b.versamento(somma);
    					break;
    				case 'p':
    					System.out.println("somma da prelevare");
    					somma=h.nextInt();h.nextLine();
    					b.prelievi(somma);
    					break;
    				case 's':
    					b.saldo();
    					break;
    				case 'l':
    					b.movimenti();
    					break;
    				case 'x':
    					System.out.println("EXIT");
    					break;
    			}
    		}while(c!='x');
    	}
    }
    public class CC{
    	private int contocorr;
    	private int i=-1;
    	private int a[]=new int[5];
    	public void versamento(int soldi){
    		this.contocorr=this.contocorr + soldi;
    		this.i++;
    		a[this.i%5]=+soldi;
    	}
    	public void prelievi(int soldi){
    		this.contocorr=this.contocorr - soldi;
    		this.i++;
    		a[this.i%5]=-soldi;
    	}
    	public void movimenti(){
    		int j;
    		for (j=0;j<5;j++){
    			System.out.println(j + ") " + a[j]);
    		}
    	}
    	public void saldo(){
    		System.out.println("Saldo = " + this.contocorr)
    	}
    }
    però ho un problema nella parte di compilazione di Banca.java :
    Banca.java:29: error: method prelievi in class CC cannot be applied to given types;
    b.prelievi(somma);
    ^
    required: int,int
    found: int
    reason: actual and formal argument lists differ in length
    1 error
    Non capisco proprio dove sta l'errore già che per il versamento non mi da nessun errore
  • Re: Programmino java (Contobancario)

    Scusate ma una risposta qualcuno me la può dare???
  • Re: Programmino java (Contobancario)

    A proposito di cosa?
    Ho provato il tuo programma e non mi ha dato errore, anche se dal punto di vista del design non è fatto assolutamente bene.

  • Re: Programmino java (Contobancario)

    Boh ho provato a compilarlo con un altro pc e funziona anche a me...comunque grazie mille per la risposta Cosa è che non va nel design? Cioè sono alle primissime armi come ho già detto e non riesco a capire bene cosa tu intendi dire. L'unico linguaggio a cui ero abituato a programmare era il C e sto riscontrando un po' di difficoltà con il java per questo sono molto ansioso delle risposte
  • Re: Programmino java (Contobancario)

    Per design credo intendono al livello di facilità nel leggere il codice scritto.

    hai risolto il problema?
  • Re: Programmino java (Contobancario)

    Per esempio una cosa del genere intendi tu?
    public class Banca {
    
    	private double saldoConto;
    
    	/*
    	 * metodo per versare i soldi nella variabile saldo.
    	 */
    	public double versamento(double soldi) {
    		saldoConto = saldoConto + soldi;
    		return saldoConto;
    	}
    
    	/*
    	 * metodo per prelevare soldi dal saldo.
    	 */
    	public double prelievo(double soldi) {
    		saldoConto = saldoConto - soldi;
    		return saldoConto;
    	}
    
    	/*
    	 * stampa il saldo.
    	 */
    	public void saldo() {
    		System.out.println(saldoConto);
    	}
    }
    
    l'ho fatta al volo, è molto stupida però il concetto di versare, prelevare e richiedere un saldo funziona. poi può essere approfondita e resa più dettagliata, magari aggiungendo delle Persone che hanno un nome cognome e numero conto bancario etc...
Devi accedere o registrarti per scrivere nel forum
9 risposte