2015-04-14 16 views
5

Sto provando a utilizzare un ciclo do while per scoprire se l'utente desidera controllare un cane o un gatto in un sistema di allevamento in Java. L'idea è che entrano "cane" o "gatto" quando richiesto, e una qualsiasi delle voci causerà un errore e verrà richiesto nuovamente di inserire il nome del file.Do while loop che soddisfa una delle due condizioni

Se è stato inserito "cat" o "dog", il file equivalente verrà assegnato al programma (dogs.txt o cats.txt), quindi il sistema eseguirà e caricherà tali dati nel programma.

Qui ci sono le variabili correnti:

private String filename; // holds the name of the file 
private Kennel kennel; // holds the kennel 
private Scanner scan; // so we can read from keyboard 
private String tempFileName; 
private String dogsFile = "dogs.txt"; 
private String catsFile = "cats.txt"; 

e il metodo che sta causando un problema:

private KennelDemo() { 
    scan = new Scanner(System.in); 

    boolean fileNotCorrect = false; 

    System.out.print("Which animal are you looking to check into the kennel?: " + "\n"); 
    System.out.println("Dog"); 
    System.out.println("Cat"); 
    tempFileName = scan.next(); 

    do { 
     tempFileName.equals("dog"); 
     filename = dogsFile; 
     fileNotCorrect = true; 

     /*tempFileName.equals("cat"); 
     filename = catsFile; 
     fileNotCorrect = true;*/ 
    } 
     while(fileNotCorrect = false); 
     System.out.println("That is not a valid filename, please enter either 'dog' or 'cat' in lowercase."); 

Ed ecco quello che sta stampato quando si esegue il codice:

**********HELLO*********** 
Which animal are you looking to check into the kennel?: 
Dog 
Cat 
cat 
That is not a valid filename, please enter either 'dog' or 'cat' in lowercase. 
Using file dogs.txt 

Assegna un file al programma indipendentemente da cosa viene inserito e continua a caricare il programma.

Ho provato a usare catch {ma non funziona per qualche motivo, qualcuno può offrire aiuto?

Grazie!

+0

'tempFileName.equals (" cane ");' è un confronto; restituire un valore booleano (vero/falso). Forse vuoi mettere un if (xxx) in giro? In altre parole: il concetto che vuoi studiare è "usare condizionali con se". – GhostCat

+0

Non hai un'istruzione if, 'tempFileName.equals (" dog ");' restituisce semplicemente un valore booleano ma non stai facendo nulla con esso. – Jyr

+0

* Uno * dei tuoi problemi è proprio qui: 'while (fileNotCorrect = false)'. Questo è un compito, non un confronto. Quello che hai lì è essenzialmente 'while (false)'. Usa '==' per confrontare. – JonK

risposta

2

Non è così che funziona-mentre sta lavorando. Non stai nemmeno controllando.

Utilizzare questa:

do { 
    System.out.print("Which animal are you looking to check into the kennel?: " + "\n"); 
    System.out.println("Dog"); 
    System.out.println("Cat"); 
    tempFileName = scan.next(); 
    if(tempFileName.equals("dog") || tempFileName.equals("cat")) 
    { 
     filename = tempFileName.equals("dog") ? dogsFile : catsFile; 
     fileNotCorrect = true; 
    }else{ 
     System.out.println("That is not a valid filename, please enter either 'dog' or 'cat' in lowercase."); 
    } 
} 
    while(!fileNotCorrect); 
+0

Grazie mille Murat, funziona. Ti dispiacerebbe spiegare brevemente perché questo funziona al posto di ciò che ho pubblicato, quindi posso capire pienamente per favore? Grazie ancora! –

+1

@JayGould In pratica non hai mai controllato nulla e le tue condizioni erano un compito che si rompeva dopo la prima iterazione. In primo luogo è necessario verificare se l'input è uguale a cane o gatto. Se fallisce, dai la dichiarazione else e lascia che l'utente faccia tutto da capo.Funziona, perché la condizione del tempo colpirà sempre fintanto che la condizione è vera e viceversa. –

1

Come altre risposte hanno accennato, ma ottenuto la logica errata, si è in modo non corretto, verifica la do-while.

Ecco una corretta snippet del codice ...

Private KennelDemo() { 
scan = new Scanner(System.in); 

boolean fileNotCorrect = false; 
do{ 
    System.out.print("Which animal are you looking to check into the kennel?: " + "\n"); 
    System.out.println("Dog"); 
    System.out.println("Cat"); 
    tempFileName = scan.next(); 
    if (tempFileName.equalsIgnoreCase("dog") || tempFileName.equalsIgnoreCase("cat")){ 
     //we want to set to true so we break out of the loop 
     fileNotCorrect = true; 
    } else{ 
     System.out.println("That is not a valid filename, please enter either 'dog' or 'cat' in lowercase."); 
    } 
}while(!fileNotCorrect);//do this while fileNotCorrect == false; 


    if(tempFileName.equals("dog")){ 
     filename = dogsFile; 
    } 
    else if (tempFileName.equals("cat")){ 
     filename = catsFile; 
    } 

Dal momento che si dichiara fileNotCorrec false sopra la vostra ciclo do-while ... non hai nemmeno bisogno di un do-while. ..un semplice ciclo while avrebbe funzionato per voi

while(!fileNotCorrect){ 
    .... 
} 

Leggi qui https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html

e questo per un po 'se la logica di lettura https://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

+0

Hai appena copiato le nostre risposte? –

+0

'Private KennelDemo() {'? Hai preso qualcosa che * era * corretto e reso sintatticamente invalido ... – JonK

+0

Ho copiato il suo codice originale ed è per questo che ho perso la parte superiore e ho apportato delle modifiche. Stavo lavorando su qualcos'altro mentre lo scrivevo, quindi mi sono perso a ricaricare le risposte per vedere il tuo post Murat. Scuse. – Ragnorak