Java - Problema while

kyuubiNaruto

Utente Attivo
245
5
CPU
AMD FX6300
Scheda Madre
Gigabyte GA-970A-UD3P/Rev 2.0
RAM
2x4gb 1333mhz
GPU
Gigabyte R9 380x 4gb
Monitor
Hannsg 27 pollici
PSU
CM GX550
Case
Corsair cambide spec-3
OS
W7 64 bit
Ciao, dovrei fare in modo che il programma mi chieda per quanti anni (quindi solo un intero) voglio che mi chieda di inserire una somma da depositare. All'inizio avevo scritto questo e andava, con il problema però che quando mettevo un negativo veniva cmq accettato dandomi però poi il problema
Codice:
static int Ins_Anni()    {
        int a=0;
        System.out.print("Inserire anni durata deposito: ");
        while (!scrivi.hasNextInt())
        {
            System.out.print("ERRORE - Inserire anni durata deposito: ");
            scrivi.nextLine();
        }
        a=scrivi.nextInt();
        scrivi.nextLine();
        return a;
    }
A quel punto ho aggiunto al while la dicitura:
Codice:
while (!scrivi.hasNextInt() || scrivi.nextInt()<=0)
però ho il problema che ogni volta che inserisco un numero, anche giusto, resta in attesa di un altro, prendendo per buono il secondo valore che inserisco.

- - - Updated - - -

+1
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
In Java i metodo devono iniziale per minuscola: invece di Ins_Anni() il nome corretto secondo le convenzioni è insAnni();
a parte quest convenzione stilistica di quello che hai scritto non si capisce niente: che roba sarebbe l'oggetto scrivi?
lo usi dentro il metodo come se fosse una variabile globale (il che sarebbe da evitare). Dovresti postare tutto il codice
 
M

Mursey

Ospite
scrivi e' un oggetto scanner, io non conosco Java ma penso che per la lettura di un input ci sia qualcosa di piu' semplice...

Di solito lo scanner viene controllato al contrario di come lo fai tu
Codice:
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(s);

while (scanner.hasNext()) {
// check if the scanner's next token is an int
System.out.println("" + scanner.hasNextInt());

// print what is scanned
System.out.println("" + scanner.next());
}

// close the scanner
scanner.close();
per poi fare le opportune considerazioni all'interno
 

kyuubiNaruto

Utente Attivo
245
5
CPU
AMD FX6300
Scheda Madre
Gigabyte GA-970A-UD3P/Rev 2.0
RAM
2x4gb 1333mhz
GPU
Gigabyte R9 380x 4gb
Monitor
Hannsg 27 pollici
PSU
CM GX550
Case
Corsair cambide spec-3
OS
W7 64 bit
In Java i metodo devono iniziale per minuscola: invece di Ins_Anni() il nome corretto secondo le convenzioni è insAnni();
a parte quest convenzione stilistica di quello che hai scritto non si capisce niente: che roba sarebbe l'oggetto scrivi?
lo usi dentro il metodo come se fosse una variabile globale (il che sarebbe da evitare). Dovresti postare tutto il codice
In effetti lo scanner è globale, ho creato all'inizio della Classe un "public static Scanner scrivi=new Scanner(System.in);" infatti lo uso nei metodi e nel main per questo non c'è la creazione dell'oggetto. Dici che è pericoloso creare uno scanner public e usarlo ovunque? Io dopo ogni utilizzo ne cancello il buffer con il ".nextLine()" quindi penso di star tranquillo. Cmq per precisione posto tutto il codice ma si creerà solo confusione.
Codice:
import java.util.*;public class ContoCorrente {
public static Scanner scrivi=new Scanner(System.in);


	static double Ins_Double()
	{
		System.out.print("Inserire valore: ");
		double a=0;
		while (!scrivi.hasNextDouble())
		{
			System.out.print("ERRORE - Inserire una somma da depositare: ");
			scrivi.nextLine();
		}
		a=scrivi.nextDouble();
		scrivi.nextLine();
		return a;
	}
	
	static int Ins_Int()
	{
		int a=0;
		System.out.print("Inserire anni durata deposito: ");
		while (!scrivi.hasNextInt() || scrivi.nextInt()<=0)
		{
			System.out.print("ERRORE - Inserire anni durata deposito: ");
			scrivi.nextLine();
		}
		a=scrivi.nextInt();
		scrivi.nextLine();
		return a;
	}
	
	static double Calc_Ricavo(double deposito, int anni)
	{
		return deposito+=deposito*anni*5/100;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double Deposito=0, Ricavo=0;
		int Anni=0, Anno=0;
		System.out.println("----------------- CONTO CORRENTE BANCARIO -----------------");
		Anni=Ins_Int();
		double[][] Database_Anni=new double[Anni][Anni+1];
				
		for (byte i=0;i<Anni;i++)
		{
			System.out.print("Anno n. "+(i+1)+ " -> ");
			Deposito=Ins_Double();
			Database_Anni[i][i]=i+1;
			Database_Anni[i][i+1]=Deposito;
		}
		
		double Tot_Depositi=0;
		for (byte i=0; i<Anni;i++)
		{
			Tot_Depositi+=Database_Anni[i][i+1];
		}
		System.out.println("Hai depositato in tutto "+Tot_Depositi+" euro.");
		System.out.print("Quale anno ti interessa? ");
		while(!scrivi.hasNextInt())
		{
			System.out.println("ERRORE - Inserire una valore intero: ");
			scrivi.nextLine();
		}
		Anno=scrivi.nextInt()-1;
		System.out.println("Hai scelto l'anno n. "+(Anno+1)+" nel quale hai depositato "+Database_Anni[Anno][Anno+1]);
		
		Ricavo=Calc_Ricavo(Tot_Depositi, Anni);
		System.out.println("Dopo "+Anni+" anni hai sul conto "+Ricavo+" euro.");
	}


}
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili