Sono un neofita e non capisco cosa non va

di il
1 risposte

Sono un neofita e non capisco cosa non va

import java.util.Scanner;
public class prova2{
	public static void main(String args[]){
		Scanner scan = new Scanner(System.in);
		int comp=1;
		
		do{

			float a= scan.nextFloat();
			char b= scan.next().charAt(0);
			float c= scan.nextFloat();
			float d=0;
			
			switch(b){
				case '+':d=somma(a,c);break ;
				case '-':d=differenza(a,c);break ;
				case '*':d=prodotto(a,c);break ;
				case '/':d=divisione(a,c);break ;
				case '^':potenza(a,c);break ;
			}
			
			System.out.println("scrivi exit");//questa è un istruzione di prova  per vedere perchè non riuscivo ad uscire dal ciclo
			String esc= scan.nextLine();    		
			/*dovrebbe leggere la stringa che do io dalla tastiera ma non aspetta che io ne digiti una ma legge direttamente la riga vuota
			e quindi non riesco ad uscire mai dal ciclo*/
			String out="exit";  				
			System.out.println(esc);//infatti questa istruzione visualizza sullo schermo una riga vuota			
			comp= esc.compareTo(out);
			System.out.println(comp);/*e alla riga successiva visualizza il valore di comparazione tra le due stringhe che sarà sempre
			diverso da zero perchè il programma non mi da la possibilità di immettere la stringa uguale a quella pilota che ho impostato*/
			
			
		}
		while(comp!=0);
	
    }

	public static float somma(float n1, float n2){
		float r=n1+n2;
		return r;
	}

	public static float differenza(float n1, float n2){
		float r=n1-n2;
		return r;
	}

	public static float prodotto(float n1, float n2){
		float r=n1*n2;
		return r;
	}

	public static float divisione(float n1, float n2){
		float r=n1/n2;
		return r;
	}

	public static float potenza(float n1, float n2){
		float c=1;
			for(int i=0;i<n2;i++){
				c=c*n1;
				}
			return c;
	}

	

}
spero di aver spiegato bene la situazione. Non riesco a capire perchè l'istruzione di scan in questo caso si comporta cosi, quando utilizzata allo stesso modo in altri codici si comporta normalmente

1 Risposte

  • Re: Sono un neofita e non capisco cosa non va

    nucula ha scritto:


    spero di aver spiegato bene la situazione. Non riesco a capire perchè l'istruzione di scan in questo caso si comporta cosi, quando utilizzata allo stesso modo in altri codici si comporta normalmente
    Il problema è la (ben nota) questione del "mix" di nextLine() con gli altri nextXXX().
    Quando ad un nextInt/nextFloat/... metti un valore es. 123 e poi dai <invio>, il metodo estrae 123 ma il "newline" dato dal <invio> NON viene rimosso e resta bufferizzato in Scanner. Se subito dopo fai un nextLine(), quel newline viene preso SUBITO come riga vuota.

    Tutto questo NON è un "baco" o mancanza di Scanner. È il suo comportamento per design.
Devi accedere o registrarti per scrivere nel forum
1 risposte