Visualizzazione dei risultati da 1 a 5 su 5

Discussione: chiarimento su while

  1. #1
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33

    chiarimento su while

    Ciao a tutti,
    ho iniziato da non molto a studiare JavaScript con un bel libro e oggi mi sono accorto che non riesco a fare una cosa che credevo semplicissima.
    Tanto per cominciare vorrei creare un prompt che richieda all'utente di inserire 5 numeri da 0 a 9, per poi inserirli in un array.

    Solo che vorrei inserire una validazione dell'input di questo tipo: se il numero inserito è < 0 o > 9 oppure se l'input non è un numero, viene visualizzato il classico messaggio di warning e viene richiesto di inserire un numero corretto.
    Ecco il codice:

    codice:
    <script language="JavaScript" type="text/javascript">
    
    var numbers = new Array(5);
    
    var loopCounter;
    
    for (loopCounter=0; loopCounter<=4; loopCounter++)
    {
    numbers[loopCounter] = prompt("Inserisci un numero da 0 a 9:");
    
    	while (numbers[loopCounter] < 0) || (numbers[loopCounter] > 9) 
    || (numbers[loopCounter]="") || (isNaN(numbers[loopCounter])) 
    	{
    	numbers[loopCounter] = prompt("INPUT ERRATO! Inserisci un numero da 0 a 9:");
    	}
    
    }
    
    document.write(numbers);
    .......
    Il punto è che sembra non essere possibile inserire clausole "or" nel ciclo while (probabilmente c'è qualcosa che non ho capito) ma a me serve proprio un ciclo while perchè l'input corretto deve continuare a essere richiesto finchè l'utente non inserisce qualcosa di valido.
    Potrei forse usare uno switch ma mi sembra molto macchinoso.
    Dove sto sbagliando?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301
    Devi aggiungere un altro livello di parentesi in modo da avere: while (...).


    codice:
    while ((numbers[loopCounter] < 0) || (numbers[loopCounter] > 9)  
    || (numbers[loopCounter]="") || (isNaN(numbers[loopCounter])))
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  3. #3
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33
    Ciao, ti ringrazio per il tuo intervento ma purtroppo neanche così funziona come dovrebbe.
    Le prime due condizioni (verifica che non sia < 0 oppure > 9) sono ok, e fino a quando non inserisci un num. tra 0 e 9 il prompt non ti fa proseguire.
    Ma le altre due condizioni (isNaN(input) || input="", cioè campo vuoto) non funzionano, infatti se provi a inserire un testo o un campo vuoto te li accetta, cosa che non dovrebbe fare.

    Riesci tu o qualcun altro a dirmi dove sto sbagliando ??
    Sono sicuro che è un errore stupido e magari di distrazione, ma ci sto perdendo una cifra di tempo..

  4. #4
    Utente di HTML.it L'avatar di torejx
    Registrato dal
    May 2005
    Messaggi
    301
    Non ci avevo neanche fatto caso!
    Codice PHP:
    (numbers[loopCounter]=""
    ci va il doppio uguale, trattandosi di confronto (altrimenti è un'assegnazione).
    Codice PHP:
    (numbers[loopCounter]==""
    io: "cosa vorresti fare da grande?"
    bambino di sei anni: "il coglione"
    io: "come mai?"
    bambino di sei anni: "perchè ogni volta che passa uno con una bella auto papà dice <<guarda quel coglione che bella macchina che c'ha>>"

  5. #5
    Utente di HTML.it L'avatar di myotis
    Registrato dal
    May 2010
    Messaggi
    33
    Guarda, a dire il vero ero talmente fuso ieri da non accorgermi non solo di alcuni semplici errori di sintassi, ma (soprattutto) neanche del fatto che lo stesso scopo poteva essere raggiunto in un modo molto più semplice e pulito.
    Hai presente le giornate in cui non riesci a far funzionare anche la più piccola delle cose senza incappare in stupidissimi problemi? Beh, ieri era proprio così...

    Comunque, il codice era il seguente:

    codice:
    while (numbers[loopCounter] < 0) || (numbers[loopCounter] > 9) 
    || (numbers[loopCounter]="") || (isNaN(numbers[loopCounter])) 
    	{
    	numbers[loopCounter] = prompt("INPUT ERRATO! Inserisci un numero da 0 a 9:");
    	}
    A parte l'errore da FUCILAZIONE del singolo "=" e il fatto che non erano necessarie tutte quelle parentesi, oggi in due secondi ho risolto tutto così:

    codice:
    while (numbers[loopCounter] < 0 || numbers[loopCounter] > 9 
    ||  isNaN(parseInt(numbers[loopCounter])))
    
    	{
    	numbers[loopCounter] = prompt("INPUT ERRATO! Inserisci un numero da 0 a 9:");
    	}
    Si potrebbe forse renderlo ancora più pulito ma è accettabile secondo me, e fa esattamente quello che voglio

    Grazie per il tuo aiuto

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.