2017-08-19 1 views
0

EDIT: Code complet pour les personnes qui en ont besoin: https://hastebin.com/tovazutuni.csJava: Comment modifier la valeur d'une variable en dehors d'un commutateur? (Juste lire le post)

ok donc im travaillant sur un grand magasin burger défi, mais pour faire simple, voici un problème similair im face:

public class Burger { 

private double priceWithAdditions = 5.00; 
private double price = 5.00; 
private String addition1; 
private double addition1Price; 

switch(burgersAdditionScanner()){ 
    case "mayo": 

     this.addition1 = "Mayo"; 
     this.addition1Price = 0.40; 
     this.priceWithAdditions += this.addition1Price; 
     System.out.println("Added Additions " + this.addition1 + " for the price of $" +this.addition1Price); 

      break; 

default: System.out.println("Get Out"); 

Plus tard dans le code, j'ai une méthode pour imprimer la réception, mais les valeurs des variables modifiées à l'intérieur du commutateur ne mettent pas à jour à l'extérieur de celui-ci:

public void Receipt() { 

    System.out.println("You Bought " + this.name + " burger for the price of $" + this.price + " with the following \nAdditions:"); 

    if(this.addition1 != null) { 

     System.out.println("Addition " + this.addition1 + " for $" + this.addition1Price); 

    } 


System.out.println("The final price is " + this.priceWithAdditions); } 

Compte tenu des valeurs de addition1 et priceWithAdditions n'a pas changé dans le cas, l'addition 1 est nulle et priceWithAdditions est toujours 5.00 au lieu de 5.40. Est-ce que quelqu'un sait comment faire la mise à jour des valeurs de ces variables à l'intérieur du commutateur. Si vous pouvez me aider Id vraiment l'apprécier, s'il vous plaît et merci

sortie de la console: (Il y a un scanner pour que je puisse saisir mes choix)

add addition 1 

Choose Addition 1 
Lettuce - $0.50 
Cheese - $1.00 
Ketchup - $0.20 
Mayo - $0.40 

mayo 

Added Addition Mayonaise for the price of $0.4 

Add Additions or none 
Add Addition 1 
Add Addition 2 
Add Adition 3 
Add Adition 4 
Receipt 

receipt 

You Bought Amer's Booty burger for the price of $5.0 with the following 
Additions: 
The final price is 5.0 
Get Out 
+0

Vous devez formater votre code – Steephen

+0

Vous ne semblez ajouter aucun de vos ajouts à 'this.priceWithAdditions'. –

+0

@ElliottFrisch Si vous regardez dans le cas "mayo", j'ai écrit this.priceWithAdditions + = this.addition1Prix; (qui est fondamentalement la même chose que this.priceWith Additions = this.priceWithAdditions + this.addition1Price) Le prix addition1 est 0.40, donc il devrait imprimer 5.40 non 5.00, mais il continue à revenir à 5.00 –

Répondre

2

Le problème est vous appelez Receipt() sur le mauvais exemple de Burger. Pour tous les appels à Receipt() (que je vois), vous appelez sur une nouvelle instance d'un Burger, comme ceci:

case "receipt": 
    HealthyBurger burgerReceipt = new HealthyBurger(); 
    burgerReceipt.Receipt(); 

burgerReceipt est une nouvelle instance d'un HealthyBurger, et non pas celui que vous appelé l'un de vos opérateurs d'addition sur. En tant que tel, il contiendra les valeurs par défaut de votre HealthyBurger. Vous pouvez résoudre ce problème en appelant le Receipt sur la même instance de HealthyBurger qui a été muté. Par exemple:

HealthyBurger burger = new HealthyBurger() 
burger.addAddition6() 
burger.Receipt() 

Votre code est un peu trop désordonné pour moi de vous donner une solution exacte à votre problème, mais vous créez de nouvelles instances de Burger dans tous les sens, dans une classe Restaurant qui se trouve également être un Burger lui-même. Je pense que si vous prenez le temps de lire sur les principes de base d'héritage/objet, vous devriez être en mesure de simplifier votre code de manière significative.

+0

Cela a fonctionné, merci beaucoup. Im un apprenti lent mais je veux apprendre, recommanderiez-vous des cours ou des vidéos pour améliorer ma compréhension de la POO ou de l'héritage? –

+0

@WackyBoss Je suis heureux que cela a aidé! Malheureusement, il y a si longtemps que j'ai commencé avec Java, je n'ai aucune recommandation pour vous. Il y a une tonne de ressources là-bas, et je suis sûr que la plupart sont très bien. – Vikram

+0

Les demandes de recommandation sont hors-sujet. –