2017-04-14 1 views
0

J'ai des problèmes pour exécuter l'affichage de la facture totale. J'ai demandé mon professeur qui m'a donné ce petit bloc de code, que je modifié pour répondre à mes besoins, mais pour une raison quelconque, il n'est pas en cours d'exécution et a l'erreur:Afficher le total de la facture, Java public void display() error

Illegal start to expression for line --> public void display().

Le compilateur suggère également de mettre fin à une demi colon que je ne crois pas est exact.

Que dois-je faire pour que public void display() ne soit pas en cours d'exécution et soit erroné?

import java.util.Scanner; 

public class CoffeeShop 

{ 
/* Author: 
    Date: 
    Program: Create a Coffee Shop application that uses a while loop to build a customer order. The Coffee Shops sells coffee ($3.25), espresso ($4.25), and tea ($2.75). The coffee selection presents the customer with the choices of iced (no charge), cream (50 cents), and sugar (50 cents). The espresso selection presents the customer with choice of caramel (no charge) and chocolate (no charge) with one shot (no charge) or two shots ($1.25) of espresso. Once the customer is done, he or she will receive a bill of the total price. After each selection, the customer will have the choice of returning to the main menu for additional purchases. Use nested loops to handle customers' submenu selections. 
*/ 
    public static void main(String[] args) 

    { 

    //declarations 
     double coff = 3.25; 
     double esp = 4.25; 
     double tea = 2.75; 
     double cream = .50; 
     double sugar = .50; 
     double dblShot = 1.25; 
     int dblshotQty = 0; 
     int userInput = 0; 
     int userInput2 = 0; 
     int coffQty = 0; 
     int espQty = 0; 
     int teaQty = 0; 
     int creamQty = 0; 
     int sugarQty = 0; 
     double runTotal = 0; 
     double totalCoff = 0; 
     double totalEsp = 0; 
     double totalTea = 0; 
     double totalBill = 0; 






     Scanner scan = new Scanner(System.in); 

     System.out.print("Would you like to place an order? press 1 for yes or 2 for no :"); 
     //start a loop with a control variable asking if they would like a cup of coffee yes or no 
     userInput = scan.nextInt(); 
     while(userInput == 1) 
     { 

     System.out.print("Enter 1 for Coffee, 2 for Espresso, or 3 for tea: "); 

     userInput2 = scan.nextInt(); 
     switch(userInput2) 
     //if 1 is pressed coffee is ordered 
     { // open switch 
      case '1': 
       { 
        coffQty = coffQty + 1; 
        System.out.print("Press 1 if you would like your coffee iced or 2 for no: "); 
        userInput = scan.nextInt(); 
       } 
       { 
        System.out.print("Press 1 if you would like cream for $.50 or 2 for no: "); 
        userInput = scan.nextInt(); 
        if (userInput == 1) 
        { 
        creamQty = creamQty + 1; 
        } 
       } 
       { 
        System.out.print("Press 1 if you would like sugar for $.50 or 2 for no: "); 
        userInput = scan.nextInt(); 
        if (userInput == 1) 
        { 
        sugarQty = sugarQty + 1; 
        } 
       }//end case 1 
       break; 

     // espresso is ordered ask for double shot 
      case '2': 
       { 
        espQty = espQty +1; 
        System.out.println("Press 1 for a double shot for $1.25 or 2 for no: "); 
        userInput = scan.nextInt(); 
        if(userInput == 1) 
        { 
        dblshotQty = dblshotQty +1; 
        } 

       }//end case 2 
       break; 

     //tea is ordered 
      case '3': 
       { 
        teaQty = teaQty + 1; 
        System.out.println("You have selected tea! Great Choice."); 
       }//end case 3 
     }//end switch 


     // create output display for total bill adding all totals 


    public void display() 
    { 
     double totalCoff = coffQty * coff + cream * creamQty + sugar * sugarQty; 
     double totalEsp = espQty * esp + dblshot * dblshotQty; 
     double totalTea = teaQty * tea; 

     System.out.println("Order: \n "+coffQty + " Coffee" 
      + "\n "+creamQty +" Cream" 
      + "\n "+sugarQty + " Sugar" 
      + "\nTotal Coffee: "+ totalCoff); 
     System.out.println(" "+teaQty + " Tea" 
      + "\nTotal Tea: "+ totalTea); 
     System.out.println(" "+espQty + " Espresso" 
      + "\n "+dblshotQty +" Double shot" 
      + "\nTotal Espresso: "+ totalEsp); 
     double totalBill = totalCoff+totalEsp+totalTea; 
     System.out.println("\nTotal drink order: "+totalBill); 
    } 



     break; 
    } // end while 
    } 



} // end of class 
+2

Vous avez une erreur sur la ligne ci-dessus. Afficher le code au-dessus de cette fonction. – Carcigenicate

+0

Vous n'avez pas besoin d'expliquer l'arrière-plan. Juste énoncer le problème de façon concise (mais clairement) que possible afin que nous ne devions pas passer au crible –

+1

D'accord avec @Carcigenicate. Habituellement, "début de ligne illégal" signifie qu'il y a quelque chose sur la ligne précédente interférant avec l'analyse de cette ligne. Par exemple, un point-virgule ou une parenthèse manquante, ou simplement une déclaration incomplète. – ostrichofevil

Répondre

0

Je vois quelques problèmes principaux:

  1. Vous avez défini display à l'intérieur de main, à l'intérieur d'une boucle while. Vous ne pouvez pas définir de méthodes à l'intérieur des méthodes, et encore moins à l'intérieur des boucles. Déplacez display en dehors de main, mais toujours dans la classe.

  2. Vous avez un break déplacé autour de display. Débarrassez-vous de cela, car ce sera aussi une erreur.

  3. Comme @MiiinimalLogic a souligné, vous comptez sur les données main à l'intérieur de display. Vous devrez transmettre les données de main à display en tant qu'arguments.

+0

J'ai essayé de mettre l'affichage à l'extérieur du premier support bouclé et à l'intérieur de la classe, je reçois toujours la même erreur. Dois-je déplacer mes déclarations dans la zone de classe (le premier accolade sous vide statique public principal) – Elements

+0

@Elements Il est difficile de dire exactement ce qui se passe avec votre code parce que votre indentation est désactivée, mais oui, l'affichage doit être sous 'main' , mais à l'intérieur de la classe. – Carcigenicate

+0

@Elements aussi, que «break» aléatoire sous 'display' doit être supprimé. Cela provoquera une erreur aussi. – Carcigenicate

0

Votre structure de code rend les choses difficiles pour vous. Comme mentionné par @Carcigenicate, (joli nom btw), vous avez déclaré une méthode dans la méthode principale. Une fois que vous modifiez cela, vous remarquerez maintenant que maintenant la méthode display montre les erreurs du compilateur. Cela est dû au fait que les variables référencées dans display ne sont plus visibles. Vous avez quelques options:

  • Repenser le design de la classe i.e Quelles méthodes devraient exister et comment elles seront appelées.
  • Utilisez la méthode d'affichage en dehors de la méthode principale, puis définissez les variables membres variables qui sont visibles par les méthodes dont vous avez besoin. Lisez à propos des effets de l'utilisation des variables membres en premier.
  • Supprimez complètement la méthode d'affichage et déplacez la logique vers la méthode principale.
+0

Je ne sais pas si ce commentaire est sarcastique ou non. J'ai déjà eu des gens offensés auparavant, donc je ne sais jamais. – Carcigenicate

+0

Haha pas son génial .. parfois j'ai envie de regarder mon moniteur est cancérigène donc je suis w/ya .. – MiiinimalLogic

+0

OK bon lol. J'avais besoin d'un mot composé pour mon nom d'utilisateur, et ça avait l'air cool. Je n'ai jamais voulu que cela soit lié au cancer, malgré la racine du mot. – Carcigenicate