2011-10-28 3 views
0

J'ai un petit problème avec cette boucle do while; quand je lance le programme, il fonctionne, au moins partiellement, ce que je veux dire est que vous devez d'abord faire un choix de conversion de C à F ou de F à C et après avoir entré les valeurs le programme arrête ce que je veux faire pour continuer à demander des valeurs jusqu'à ce que vous entrez 3. J'ai essayé de le faire avec une boucle do while mais cela ne fonctionne pas, donc si quelqu'un a des idées, je serais reconnaissant. Voici le code:Avoir des problèmes avec do ... while Loop

import java.util.Scanner; 

public class DegreesInConversion2 { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Conversion table: "); 
     int choice = input.nextInt(); 
     do { 
      System.out.println(); 
      System.out.println("1 for convertion from Celsious to Fahrenhait: "); 
      System.out.println("2 for convertion froom Fahrenheit to Celsious: "); 
      System.out.println("3 for Exit: "); 
      System.out.println(); 
      System.out.println("Make a choice between 1 - 3 "); 
      choice = input.nextInt(); 
      System.out.println(); 
      switch (choice) { 
      case 1: 
       System.out.println("Enter temperature in Celsious: "); 
       double cel = input.nextDouble(); 
       if (cel < -273.15) { 
        System.out.println("Invalid values, please enter temperature greater than -273.15 in C:"); 
       } else { 
        System.out.println("You enetered " + cel + "C " + "which is " + (((cel * 9)/5) + 32) + "F"); 
       } 
       break; 
      case 2: 
       System.out.println("Enter temperature in Farhneit: "); 
       double far = input.nextDouble(); 
       if (far < -459.67) { 
        System.out.println("Invalid values, please enter temperature greater than -459.67 in F:"); 
       } else { 
        System.out.println("You enetered " + far + "F " + "which is " + (((far - 32) * 5)/9) + "C"); 
       } 
       break; 
      case 3: 
       System.out.println("Goodbyu have a nice day: "); 
       break; 
      default: 
       System.out.println("Invalid entry: Please enter a number between 1-3:"); 
      } 
     } while (choice != 3); 
    } 
} 

Répondre

4

Comme dans your other question, ici vous numérisez pour l'entrée avant de demander à l'utilisateur pour l'entrée.

Vous devez supprimer la deuxième ligne ci-dessous:

System.out.println("Conversion table: "); 
    int choice = input.nextInt(); 
    do 

Avec votre code tel quel, il émet

Conversion table: 

puis bloque en attente pour l'entrée. Alors que vous le souhaitez à la place de continuer dans la boucle while et de sortie

1 for convertion from Celsious to Fahrenhait: 
2 for convertion froom Fahrenheit to Celsious: 
3 for Exit: 

Make a choice between 1 - 3 

avant de bloquer pour numériser pour l'entrée. Ainsi, si vous entrez un nombre au premier bloc, votre programme entre dans la boucle et se comporte comme vous le souhaitez. Donc vous êtes presque là!

0

Le code ne fonctionne pas. le problème est très probablement le

int choice = input.nextInt(); 

avant la do

enlever, et changer

choice = input.nextInt(); 

à

int choice = input.nextInt(); 
+0

je l'ai changé et que quand je le compiler je reçu ce message "Exception dans le thread « principal » java.lang.Error: problème de compilation non résolues: \t choix ne peut pas être résolu en une variable \t à DegreesInConversion2.main (DegreesInConversion2.java:48) " – Kiril

+0

où ligne 48 est} while (choix! = 3); – Kiril

+0

Vous êtes sûr d'avoir changé 'choice = input.nextInt();' en 'int choice = input.nextInt();'? – Nivas

0

Outre le fait que vous avez: int choice = input.nextInt(); en dehors de la boucle qui est entrée inutilement avant de montrer le m Enu, il semble que tout fonctionne relativement bien. Vous pouvez simplement déclarer int choice à l'intérieur de la boucle où vous avez choice = input.nextInt(); (c'est-à-dire simplement changer cela en intchoice = input.nextInt();).

0

J'ai testé votre code, et il fonctionne très bien si vous changez la ligne int choice = input.nextInt(); (juste avant votre bloc do{} while()) en int choice;.

Comme d'autres ont déjà mentionné, vous ne devriez pas lire l'entrée avant votre bloc do{} while(), puisque la question n'a pas encore été posée.

0

vous avez oublié le break; après votre cas par défaut