Corso Live Part-time Su Fondamenti Di Java › Forum › Java › Gestione Bancomat problema array per i movimenti conto
- Questo topic ha 4 risposte, 1 partecipante ed è stato aggiornato l'ultima volta 2 anni, 10 mesi fa da Alex.
-
AutorePost
-
9 Febbraio 2022 alle 18:52 #5622AlexPartecipante::
Ho un problema, secondo me mi sto perdendo in un bicchiere d’acqua ma non riesco ad uscirne.
La traccia è questa:
Scrivere una classe per la gestione di un bancomat.Deve essere possibile:
Prelevare, se c’è disponibilità sul conto, e poter scegliere il taglio di banconote da consegnare
Versare
Ottenere la lista degli ultimi 20 movimentiIl mio output quando voglio visualizzare l’array mi da:
ELENCO MOVIMENTI
19 //questo sarebbe il numero del movimento
00001514 //questo il numero del conto
5000.0 // questo il saldo disponibile alla fine di quel movimento versamento/prelievo19
00001514
5000.019
00001514
5000.0
…
stampa sempre questo per 20 volte, mi sono perso e non riesco a capire perchè non riesco a salvare nell’array movimento per movimento.IL CODICE DELLA CLASSE GestioneBancomat E’ QUESTO:
public class GestioneBancomat {
protected String numeroConto;
protected float SaldoTotale = 0;
protected int numMov = 0;
private GestioneBancomat[] movimenti = new GestioneBancomat[20];public void inserisciMovimento (GestioneBancomat m) {
for (int i = 0; i < 20; i++) {
movimenti[i] = m;
numMov = i;
}
}public void stampaMovimenti() {
System.out.println(“ELENCO MOVIMENTI”);
for (int s = 0; s < movimenti.length; s++) {
System.out.println(movimenti[s].getNumMov());
System.out.println(movimenti[s].getNumeroConto());
System.out.println(movimenti[s].getSaldoTotale());
System.out.println();
}
}public void prelievo(float sommaDaPrelevare, int taglioBanconote) {
if (this.SaldoTotale == 0) {
System.out.println(“Sul conto non sono presenti soldi da prelevare!”);
return;
}if (this.SaldoTotale < sommaDaPrelevare) {
System.out.println(“La somma richiesta è maggiore del saldo disponibile sul conto corrente”);
return;
}if (taglioBanconote == 20 || taglioBanconote == 50 || taglioBanconote == 100) {
System.out.println(“Hai scelto di prelevare ” + sommaDaPrelevare + ” in banconote da ” + taglioBanconote);
this.SaldoTotale = SaldoTotale – sommaDaPrelevare;
System.out.println(“Il nuovo saldo è: ” + this.SaldoTotale + “€”);
} else {
System.out.println(“Ci dispiace ma questo ATM può erogare soltanto banconote nei sequesti tagli 20€, 50€, 100€”);
}}
public void deposito (float sommaDaDepositare) {
this.SaldoTotale = this.SaldoTotale + sommaDaDepositare;
}public int getNumMov() {
return numMov;
}
public void setNumMov(int numMov) {
this.numMov = numMov;
}
public String getNumeroConto() {
return numeroConto;
}
public void setNumeroConto(String numeroConto) {
this.numeroConto = numeroConto;
}
public float getSaldoTotale() {
return SaldoTotale;
}
public void setSaldoTotale(float saldoTotale) {
SaldoTotale = saldoTotale;
}}
IL CODICE DEL main E’:
import java.util.Scanner;
public class testGestioneBancomat {
public static void main(String[] args) {
int sceltaMenu;
boolean cicloContinuoMenu = true;
String contoCorrente;
float saldoIniziale;
int taglioBanconote;
float sommaDaPrelevare;
float sommaDaDepositare;Scanner tas = new Scanner(System.in);
GestioneBancomat c1 = new GestioneBancomat();
System.out.print(“Inserisci il numero di conto corrente: “);
contoCorrente = tas.nextLine();
c1.setNumeroConto(contoCorrente);
System.out.print(“Inserisci il saldo iniziale del tuo conto corrente: “);
saldoIniziale = tas.nextFloat();
c1.setSaldoTotale(saldoIniziale);System.out.println();
System.out.println(“Stai operando sul conto: ” + c1.getNumeroConto());
System.out.println();do {
System.out.println(“Benvenuto, fai una scelta tra le seguenti:”);
System.out.println(“Digita 1 per visualizzare il saldo del tuo conto”);
System.out.println(“Digita 2 per prelevare saldo dal tuo conto”);
System.out.println(“Digita 3 per depositare saldo nel tuo conto”);
System.out.println(“Digita un numero negativo (ES. -1) per terminare il programma”);
System.out.println();sceltaMenu = tas.nextInt();
switch (sceltaMenu) {
case 1:
//System.out.println(“test1”);
System.out.print(“Il tuo saldo è: ” + c1.getSaldoTotale() + “€”);
System.out.println();
System.out.println();
break;case 2:
//System.out.println(“test2”);
System.out.print(“Inserisci la somma da prelevare (saldo disponibile): ” + c1.getSaldoTotale() + “: “);
sommaDaPrelevare = tas.nextFloat();
System.out.print(“Inserisci il taglio delle banconote tra 20€ – 50€ – 100€: “);
taglioBanconote = tas.nextInt();
c1.prelievo(sommaDaPrelevare, taglioBanconote);
c1.inserisciMovimento(c1);
System.out.println();
break;case 3:
//System.out.println(“test3”);
System.out.print(“Inserisci la somma da depositare: “);
sommaDaDepositare = tas.nextFloat();
c1.deposito(sommaDaDepositare);
System.out.println(“Il nuovo saldo è: ” + c1.getSaldoTotale() + “€”);
c1.inserisciMovimento(c1);
System.out.println();
break;case 4:
c1.stampaMovimenti();
break;case -1 :
System.out.println(“******* PROGRAMMA TERMINATO *******”);
System.exit(1);
default:
System.out.println(“Nessuna scelta corretta”);
System.out.println();
break;
}} while (cicloContinuoMenu); //il programma continua fin quando questa condizione è vera
}
}
Una dritta per tornare sulla strada giusta?
Grazie.10 Febbraio 2022 alle 10:44 #5623ANTONIO PAGANOOspite::Il problema principale è il metodo inseriscimovimento, non hai messo la logica per memorizzare gli ultimi 20 movimenti. Potresti ad esempio mantenere nella prima posizione l’ultimo movimento, nella seconda il penultimo e cosi vai. Questo comporta che devi traslare verso destra il contenuto dell’array.
Altra cosa, l’array deve essere di float per memorizzare i movimenti.
Di seguito una possibile soluzione:package com;
public class GestioneBancomat {
protected String numeroConto;
protected float SaldoTotale = 0;
private float[] movimenti = new float[20];public void inserisciMovimento(float m) {
for (int i = movimenti.length – 1; i > 0; i–) {movimenti[i] = movimenti[i – 1];
}
movimenti[0] = m;
}public void stampaMovimenti() {
System.out.println(“ELENCO MOVIMENTI”);
for (int s = 0; s < movimenti.length; s++) {
if (movimenti[s] != 0)
System.out.println(“movimento numero:” + s + ” con importo ” + movimenti[s]);
}
System.out.println();
}public void prelievo(float sommaDaPrelevare, int taglioBanconote) {
if (this.SaldoTotale == 0) {
System.out.println(“Sul conto non sono presenti soldi da prelevare!”);
return;
}if (this.SaldoTotale < sommaDaPrelevare) {
System.out.println(“La somma richiesta è maggiore del saldo disponibile sul conto corrente”);
return;
}if (taglioBanconote == 20 || taglioBanconote == 50 || taglioBanconote == 100) {
System.out.println(“Hai scelto di prelevare ” + sommaDaPrelevare + ” in banconote da ” + taglioBanconote);
this.SaldoTotale = SaldoTotale – sommaDaPrelevare;
this.inserisciMovimento(-sommaDaPrelevare);
System.out.println(“Il nuovo saldo è: ” + this.SaldoTotale + “€”);
} else {
System.out.println(
“Ci dispiace ma questo ATM può erogare soltanto banconote nei sequesti tagli 20€, 50€, 100€”);
}}
public void deposito(float sommaDaDepositare) {
this.SaldoTotale = this.SaldoTotale + sommaDaDepositare;
inserisciMovimento(sommaDaDepositare);
}public String getNumeroConto() {
return numeroConto;
}public void setNumeroConto(String numeroConto) {
this.numeroConto = numeroConto;
}public float getSaldoTotale() {
return SaldoTotale;
}public void setSaldoTotale(float saldoTotale) {
SaldoTotale = saldoTotale;
}
}Nel main abbiamo:
public static void main(String[] args) {int sceltaMenu;
boolean cicloContinuoMenu = true;
String contoCorrente;
float saldoIniziale;
int taglioBanconote;
float sommaDaPrelevare;
float sommaDaDepositare;Scanner tas = new Scanner(System.in);
GestioneBancomat c1 = new GestioneBancomat();
System.out.print(“Inserisci il numero di conto corrente: “);
contoCorrente = tas.nextLine();
c1.setNumeroConto(contoCorrente);
System.out.print(“Inserisci il saldo iniziale del tuo conto corrente: “);
saldoIniziale = tas.nextFloat();
c1.setSaldoTotale(saldoIniziale);System.out.println();
System.out.println(“Stai operando sul conto: ” + c1.getNumeroConto());
System.out.println();do {
System.out.println(“Benvenuto, fai una scelta tra le seguenti:”);
System.out.println(“Digita 1 per visualizzare il saldo del tuo conto”);
System.out.println(“Digita 2 per prelevare saldo dal tuo conto”);
System.out.println(“Digita 3 per depositare saldo nel tuo conto”);
System.out.println(“Digita 4 per visualizzare la lista movimenti”);
System.out.println(“Digita -1 per terminare il programma”);
System.out.println();sceltaMenu = tas.nextInt();
switch (sceltaMenu) {
case 1:
// System.out.println(“test1”);
System.out.print(“Il tuo saldo è: ” + c1.getSaldoTotale() + “€”);
System.out.println();
System.out.println();
break;case 2:
// System.out.println(“test2”);
System.out.print(“Inserisci la somma da prelevare (saldo disponibile): ” + c1.getSaldoTotale() + “: “);
sommaDaPrelevare = tas.nextFloat();
System.out.print(“Inserisci il taglio delle banconote tra 20€ – 50€ – 100€: “);
taglioBanconote = tas.nextInt();
c1.prelievo(sommaDaPrelevare, taglioBanconote);
System.out.println();
break;case 3:
// System.out.println(“test3”);
System.out.print(“Inserisci la somma da depositare: “);
sommaDaDepositare = tas.nextFloat();
c1.deposito(sommaDaDepositare);
System.out.println(“Il nuovo saldo è: ” + c1.getSaldoTotale() + “€”);
System.out.println();
break;case 4:
c1.stampaMovimenti();
break;case -1:
System.out.println(“******* PROGRAMMA TERMINATO *******”);
System.exit(1);
default:
System.out.println(“Nessuna scelta corretta”);
System.out.println();
break;
}} while (cicloContinuoMenu); // il programma continua fin quando questa condizione è vera
}
10 Febbraio 2022 alle 10:46 #5624ANTONIO PAGANOOspite10 Febbraio 2022 alle 14:43 #562510 Febbraio 2022 alle 14:45 #5626 -
AutorePost
- Devi essere connesso per rispondere a questo topic.