Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    28

    [Java] Problema condizione ciclo while

    Salve a tutti.
    Questo semplice programmino mi stampa a video un quadrato con dimensione specificata dall'utente e controllando la dimensione del lato del quadrato.
    Non riesco a capire, se la condizione del ciclo while deve esser vera per eseguire il corpo del costrutto,nel mio caso come mai non da errore?
    Mi spiego
    Se digitassi 6 come numero dei lati del mio quadrato la condizione sarebbe

    while (6 < 1 || 6 > 20);
    Quindi se 6 non è inferiore a 1 e non è superiore a 20 la condizione dovrebbe esser false quindi il ciclo non dovrebbe nemmeno partire?

    public class esempio {
    public static void main(String[] args)
    {int a;
    do {
    Console.scriviStringa("Inserisci la dimensione del lato, compresa tra 1 e 20");
    a = Console.leggiIntero();
    }
    while (a < 1 || a > 20);
    for (int i = 0; i <a; i++)
    {
    for (int j = 0; j <a; j++)
    Console.scriviUnCarattere('*');
    Console.nuovaLinea();
    }
    }
    }


    Bello k se a prima vista sembra di aver capito tutto, basta andare appena nello specifico x non aver più chiaro assolutamente niente...

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: [Java] Problema condizione ciclo while

    Originariamente inviato da eonta
    Salve a tutti.
    Questo semplice programmino mi stampa a video un quadrato con dimensione specificata dall'utente e controllando la dimensione del lato del quadrato.
    Non riesco a capire, se la condizione del ciclo while deve esser vera per eseguire il corpo del costrutto,nel mio caso come mai non da errore?
    Mi spiego
    Se digitassi 6 come numero dei lati del mio quadrato la condizione sarebbe

    while (6 < 1 || 6 > 20);
    Quindi se 6 non è inferiore a 1 e non è superiore a 20 la condizione dovrebbe esser false quindi il ciclo non dovrebbe nemmeno partire?

    public class esempio {
    public static void main(String[] args)
    {int a;
    do {
    Console.scriviStringa("Inserisci la dimensione del lato, compresa tra 1 e 20");
    a = Console.leggiIntero();
    }
    while (a < 1 || a > 20);
    for (int i = 0; i <a; i++)
    {
    for (int j = 0; j <a; j++)
    Console.scriviUnCarattere('*');
    Console.nuovaLinea();
    }
    }
    }


    Bello k se a prima vista sembra di aver capito tutto, basta andare appena nello specifico x non aver più chiaro assolutamente niente...

    Grazie
    Racchiudi il codice fra tag [CODE].

    Dopo il while non devi mettere il ";", altrimenti scrivi un while senza corpo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    28
    Ok le pross volte vedrò di inserire le parentesi al codice.
    Ok sul ";", non mi ero accorto,purtroppo le sviste si sprecano sempre...

    Ma riguardo alla mia domanda sulla condizione interna al ciclo While?Ancora non sono riuscito a capirne la logica..

  4. #4
    Il ; ci vuole in quanto non si tratta di un costrutto while, ma di un do-while:

    codice:
    ...
    do {
    Console.scriviStringa("Inserisci la dimensione del lato, compresa tra 1 e 20");
    a = Console.leggiIntero();
    }
    while (a < 1 || a > 20);
    ...
    Originariamente inviato da eonta
    ...la condizione dovrebbe esser false quindi il ciclo non dovrebbe nemmeno partire?
    La differenza tra il while ed il do-while è proprio questa. Nel while viene prima valutata la condizione e poi eventualmente eseguito il codice per cui esso potrebbe non essere mai eseguito. Nel do-while viene prima eseguito il codice e poi verificata la condizione. In questo modo, anche se la condizione risulta essere falsa, il codice viene eseguito almeno una volta.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    28
    Ok, quindi i passaggi sono
    -Do
    -codice del while
    -condizione
    Quindi nel mio caso quando viene letta la prima volta la condizione il ciclo si stoppa?
    Ma allora la condizione è scritta volutamente falsa; nel senso sulla traccia dell'esercizio il programma doveva controllare controllare che la dimensione del lato fosse "maggiore o uguale ad uno e minore o uguale a venti"; quindi dovevo scrivere una condizione che mi interrompesse volutamente il ciclo,o meglio dovevo creare un ciclo while che almeno una volta eseguisse il codice.
    Forse per me rimane ancora molto difficile tradurre la traccia in codice..nel senso:
    x come avrei interpretato la traccia avrei pensato di dovere scrivere proprio

    codice:
     while (a>=1 || a<=20);
    Naturalmente c'era un altro modo di eseguire l'esercizio?
    X me risulta ancora molto ostico tradurre la traccia in codice, nel senso che non so mai quale ciclo è + adatto o più funzionale e soprattutto mi è difficile capire se è più una questione di logica o più di automatismo che mi porta a scegliere un tipo di ciclo rispetto ad un altro.

  6. #6
    L'idea alla base è quella di continuare a chiedere input all'utente finchè egli non inserisca un valore compreso tra 1 e 20. Per cui la condizione, deve essere vera per tutti i valori NON compresi tra 1 e 20 per permettere di rieseguire il codice che chiede l'input all'utente. Nel caso egli inserisca un valore lecito la condizione deve diventare falsa il che interrompe il ciclo ed il codice prosegue nella sua esecuzione col valore inserito.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,325
    Faccio notare che questa condizione
    codice:
    while (a>=1 || a<=20);
    E' sempre vera per qualunque valore di a.

    Infatti, qualunque numero è maggiore o uguale a 1 oppure minore o uguale a 20. Una delle due è sempre verificata e l'OR rende vera l'intera espressione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da satifal
    Il ; ci vuole in quanto non si tratta di un costrutto while, ma di un do-while:

    codice:
    ...
    do {
    Console.scriviStringa("Inserisci la dimensione del lato, compresa tra 1 e 20");
    a = Console.leggiIntero();
    }
    while (a < 1 || a > 20);
    ...


    La differenza tra il while ed il do-while è proprio questa. Nel while viene prima valutata la condizione e poi eventualmente eseguito il codice per cui esso potrebbe non essere mai eseguito. Nel do-while viene prima eseguito il codice e poi verificata la condizione. In questo modo, anche se la condizione risulta essere falsa, il codice viene eseguito almeno una volta.
    Hai ragione, ho guardato il codice successivo invece di quello precedente e mi sembrava un while

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    28
    Scusate ancora...

    Forse il problema è che non riesco a capire com'è scritto il codice;
    do {Console.scriviStringa("Inserisci la dimensione del lato, compresa tra 1 e 20");
    a = Console.leggiIntero();
    }
    while (a < 1 || a > 20);
    la mia traduzione:
    condizione whileer tutti i valori inferiore ad 1 (a<1) e maggiori di 20 (a>20);
    se digito 22 come lato del mio quadrato la condizione è falsa e quindi il ciclo while non parte e si ripete l'istruzione presente nel do.

    Ma se la regola del ciclo while vuole che la condizione (o una delle due) sia "Vera" per far eseguire il codice (del while), allora si può dire k se è presente il do,il codice del while viene eseguito sempre e solamente se la sua condizione sarà falsa?

    Ultimissima cosa:
    Allora la condizione del ciclo poteva esser scritta anche in questo modo (infatti funziona):

    codice:
    while (a > 20);
    Grazie

  10. #10
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    Ciao, non ho letto tutto il post ma il tuo ragionamento è un po contorto....
    il do-while è un costrutto che esegue il corpo una prima volta e poi controlla la condizione se è falsa il ciclo si ferma se è vera il corpo viene eseguito nuovamente esempietto:

    codice:
            int i=0;
            boolean ciao=true;
            do{//corpo
                System.out.println("ciao di "+i);
                i++;
                if(i==100){ciao=false;}
                
            }while(ciao);
    quando i arriva a 100 il ciclo si ferma!
    adesso la condizione che hai allinterno del while è un OR che vuol dire che se 1 delle due condizioni è vera sara vero tutto. Praticamente scrivendo "(a < 1 || a > 20)" comprendi uno spazio di risultati che prende tutti i numeri TRANNE i numeri da 2 a 19 facendo invece la condizione "(a>20)" compredi tutti i numeri da 21 in poi....
    Quindi se nel ciclo con condizione "(a < 1 || a > 20)" dai 2 o 18 il ciclo si ferma
    se vuoi che il ciclo si fermi anche agli estremi devi mettere "(a < =1 || a >=20)"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.