2011-12-22 2 views
2

J'ai une tâche d'université où je dois imprimer des articles vendus par une quincaillerie, saisir des données d'un utilisateur, effectuer des calculs sur cette entrée, puis imprimer une facture.Imprimer le formatage en saisissant les données de l'utilisateur

J'ai réussi à imprimer les articles vendus par la quincaillerie, mais je rencontre des problèmes avec la boucle while qui prend l'entrée.

Le programme demande à l'utilisateur d'entrer un CODE et demande ensuite la QUANTITÉ correspondante. Cela fonctionne correctement lors de la première itération de la boucle, mais lors de la seconde itération, l'utilisateur demande "CODE:" et "QUANTITY:" apparaissent sur la même ligne, malgré mon utilisation de println lors de l'invite de l'utilisateur.

J'apprécierais énormément une réponse détaillée appropriée pour quelqu'un de nouveau en programmation.

Voici le code:

import java.util.Scanner; 

class HardwareStore { 


    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 


     System.out.println("WELCOME TO THE HARDWARE STORE!"); 
     System.out.println("----------------------------------------------------------------------"); 


     String sticky = "G22"; 
     String keyring = "K13"; 
     String screwy = "S21"; 
     String padlock = "I30"; 


     int stickyprice = 10989; 
     int keyringprice = 5655; 
     int screwyprice = 1099; 
     int padlockprice = 4005; 


     System.out.println("CODE\t\tDESCRIPTION\t\t\t\t\tPRICE"); 
     System.out.println("----\t\t-----------\t\t\t\t\t-----"); 

     System.out.println(sticky + "\t\tSTICKY Construction Glue, Heavy Duty, \n\t\t7oz, 12 Pack \t\t\t\t\t$" + stickyprice); 
     System.out.println(keyring + "\t\tCAR-LO Key Ring, Quick Release, \n\t\t1 Pack\t\t\t\t\t\t$ " + keyringprice); 
     System.out.println(screwy + "\t\t!GREAT DEAL! SCREW-DUP Screwy Screws, \n\t\tDry Wall Screws, 3 in. Long, 50 Pack\t\t$ " + screwyprice); 
     System.out.println(padlock + "\t\tLET-IT-RAIN, Weather Proof Padlock, \n\t\tPortable, One Push Functionality\t\t$ " + padlockprice); 
     System.out.println("----------------------------------------------------------------------"); 


     int i = 10000; 
     String [] usercode = new String[i]; 
     int [] userquantity = new int[i]; 


     System.out.println("PLEASE ENTER YOUR ORDER:"); 


     while (true) { 
      System.out.println("CODE: (X to terminate)"); 
      usercode[i] = in.nextLine(); 

      if (usercode[i].equalsIgnoreCase("x")) { 
       break; 
      } 

      System.out.println("QUANTITY: "); 
      userquantity[i] = in.nextInt(); 
     } 
    } 
} 
+0

Aussi, n'hésitez pas à modifier le reste du code et donnez-moi des conseils sur la façon de procéder avec le programme. Ou quelles sont certaines des façons dont je peux améliorer. –

+2

Vous devriez accepter une réponse à votre question précédente. –

+0

Comment je fais ça? J'ai cliqué OUI sur "Cet article vous a-t-il été utile?" à l'une des réponses. Je le referai si c'est ce que je dois faire. Peut-être que je n'ai pas bien fait la dernière fois. –

Répondre

5

lorsque vous entrez dans la QUANTITY vous appuyez sur entrer. Ce caractère newline n'est pas utilisé par in.nextInt();, il reste dans le tampon du scanner, jusqu'à ce que vous rouliez à in.nextLine() à nouveau.

À ce stade, in.nextLine() lit jusqu'à ce qu'il trouve un caractère de nouvelle ligne, qui se trouve être le suivant dans le tampon. Donc, il saute directement à QUANTITY à nouveau.

+0

si vous avez besoin de plus d'explications, n'hésitez pas à commenter ici nick. Je mettrai à jour ma réponse avec plus d'info. – Sheriff

+0

Merci. Souhaitez ajouter un in.nextLine(); résoudre le problème ici? Ou suis-je complètement à propos de cela. –

+0

@nickecarlo oui, dans ce cas, il le ferait. Il consommerait le '\ n' pour la prochaine boucle autour. Cependant, cela ne va pas toujours être la meilleure pratique. Je ne me souviens pas si Java autorise la séparation des entrées avec un espace de la ligne de commande, comme le fait C++. Si tel est le cas, le 'in.nextLine()' causerait des problèmes si vous, par exemple, entré "STICKY (SPACE) 3" – Sheriff

Questions connexes