Difficoltà per ripetere un programma con un ciclo do/while e variabile booleana.

di il
1 risposte

Difficoltà per ripetere un programma con un ciclo do/while e variabile booleana.

Salve a tutti ragazzi. Stavo provando un semplice programma scritto in Java che chiedeva l'inserimento del numero di valori che si vogliono sommare e, dopo aver effettuato la somma, mi visualizzava il messaggio "La somma è:"+(valore della somma). Fino a qui, tutto bene. Il mio problema sorge nel momento in cui vado a chiedere se si vuole ripetere il programma. Come posso far tornare sopra il programma in modo da farmi richiedere quanti valori inserire ecc..? Il programma è il seguente e, nel momento in cui chiedo se si vuole ripetere il programma e si scrive qualcosa di diverso da sì, il programma mi imposta ugualmente la flag a true e mi ripete di nuovo il programma, nonostante io abbia dato una risposta diversa da "si". Ho provato anche a mettere un "else flag=false" senza inizializzare la flag a false sopra ma comunque non parte. Qual è il problema? Grazie in anticipo.

import java.util.Scanner;
public class Operazioni {
Scanner tastiera=new Scanner(System.in);

public void contaVolte() {
int somma = 0;
int conta = 0;
int valore = 0;
int numeroValori = 0;
String risposta;
boolean flag;

do {
flag=false;
numeroValori=0;
conta=0;
somma=0;
System.out.println("Quanti valori vuoi inserire?");
numeroValori=Integer.parseInt(tastiera.nextLine());

while(conta<numeroValori){
System.out.println("Il valore e':");
valore=Integer.parseInt(tastiera.nextLine());
somma=somma+valore;
conta++;
}
System.out.println("La somma e':"+somma);

System.out.println("Vuoi rifare la somma?");
risposta=tastiera.nextLine();
if(risposta.equals("si"))
flag=true;

}
while(flag=true);

}
}

1 Risposte

  • Re: Difficoltà per ripetere un programma con un ciclo do/while e variabile booleana.

    Beler ha scritto:


    while(flag=true);
    Questo è il punto sbagliato. Perché quel flag=true è un assegnamento, non un test per uguaglianza. Ed è accettato dal compilatore (incidentalmente, come caso assolutamente particolare) solo perché è l'assegnamento di un boolean. Quindi true viene assegnato a flag E allo stesso tempo il risultato complessivo della espressione è ovviamente true, che rende il ciclo sempre "vero".

    Semplicemente:

    while(flag==true);

    o ancora più abbreviato

    while(flag);
Devi accedere o registrarti per scrivere nel forum
1 risposte