2017-09-16 2 views
0

Ich bin Student und lerne gerade über Klasse und Methoden. Ich erhalte einen Fehler (Zeile 30 - Einsparungen = Pr * Rabatt/100) "Kann kein Symbol finden". Ich verstehe, dass mein variabler Rabatt außerhalb des Geltungsbereichs liegt, aber ich kann nicht herausfinden, wie ich dies korrigieren kann. Ich habe die mir zur Verfügung gestellten Anweisungen befolgt, funktioniert aber immer noch nicht. Ich habe schon ein paar Tippfehler im Lehrbuch gefunden, also fehlt etwas? Oder ist es meine Positionierung von geschweiften Klammern?JAVA Variabel außerhalb des Geltungsbereichs

import java.util.Scanner; // Allows for user input 

public class ParadiseInfo2 
    { 
    public static void main(String[] args) 
    { 
     double price; // Variable for minimum price for discount 
     double discount; // Variable for discount rate 
     double savings; // Scanner object to use for keyboard input 
     Scanner keyboard = new Scanner(System.in); 

     System.out.print("Enter cutoff price for discount >> "); 
     price = keyboard.nextDouble(); 
     System.out.print("Enter discount rate as a whole number >> "); 
     discount = keyboard.nextDouble(); 

     displayInfo(); 

     savings = computeDiscountInfo(price, discount); 


    System.out.println("Special this week on any service over " + price); 
    System.out.println("Discount of " + discount + " percent"); 
    System.out.println("That's a savings of at least $" + savings); 

    } 

    public static double computeDiscountInfo(double pr, double dscnt) 
    { 
    double savings; 
    savings = pr * discount/100; 
    return savings; 
    } 

    public static void displayInfo() 
    { 
    System.out.println("Paradise Day Spa wants to pamper you."); 
    System.out.println("We will make you look good."); 
    } 
} 
+0

Es ist ein einfaches Problem zu beheben. Ich habe unten eine Antwort hinzugefügt. – Assafs

+0

Übrigens, wenn meine Antwort das Problem gelöst hat - darf ich Sie bitten, die Antwort zu akzeptieren, indem Sie auf das graue Häkchen daneben klicken und es grün machen? – Assafs

+2

Lassen Sie dies eine Lektion sein, warum das Entfernen von Vokalen aus variablen Namen eine schreckliche Idee ist. –

Antwort

1

Ihr Code korrekt ist - man muss nur die außerhalb des Gültigkeitsbereichs variablen Rabatt aufgerufen, wenn Sie die in variable dscnt Umfang benötigt. Versuchen Sie folgendes:

public static double computeDiscountInfo(double pr, double dscnt) { 
    double savings; 
    savings = pr * dscnt/100; 
    return savings; 
} 
1

Das Problem wird verursacht durch, wie Sie in Ihrer Frage erwähnt, wird die Variable discount außerhalb des Gültigkeitsbereichs zu sein. Schauen wir uns an, warum.

In Ihrem ursprünglichen Code wird die Methode computeDiscountInfo(double pr, double dscnt) an Parameter übergeben: ein doppelt beschriftetes pr und ein weiteres doppeltes dscnt. Ihre Methode kennt nur diese beiden Parameter und nicht etwas, das sich außerhalb davon abspielt. (Es gibt einige Ausnahmen, wie zum Beispiel "statische" Variablen oder Variablen, die von einem Elternteil weitergegeben werden. Diese sind jedoch höchstwahrscheinlich außerhalb des Rahmens Ihres Lernens. Ich bin sicher, dass Sie sie bald in der Schule abdecken werden.)

Da die Variable discount in der main() Methode deklariert ist, gibt es keine Möglichkeit für Ihre computeDiscountInfo(double pr, double dscnt) Methode, von seiner Existenz zu wissen. Wenn Sie diese Methode aufrufen, können Sie ihr die Variable discount als zu verwendenden Parameter übergeben (wie in Ihrem Code mit savings = computeDiscountInfo(price, discount);). Die Methode wendet dann den Wert discount auf ihre eigene lokale Variable dscnt an, die Sie in der Datei definiert haben Erklärung der Methode. Dies ist die Variable, die die Methode kennt und verwendet.

Nun kann auf Ihrer Methode zurück:

public static double computeDiscountInfo(double pr, double dscnt) 
    { 
    double savings; 
    savings = pr * discount/100; 
    return savings; 
    } 

Bei diesem Verfahren Sie auf die Variable als discount beziehen, nicht durch den lokalen Namen dscnt wie in der Methode der Parameter erklärt. Die Methode hat kein Verständnis dafür, was discount bedeutet. Es könnte an dieser Stelle kein Doppelgänger passieren. Indem Sie das Wort discount in dscnt innerhalb Ihrer Methode ändern, wird die Methode in der Lage sein, zu verstehen, worüber Sie sprechen, und den Wert richtig verwenden.

public static double computeDiscountInfo(double pr, double dscnt) 
    { 
    double savings; 
    savings = pr * dscnt/ 100; 
    return savings; 
    } 

Ich hoffe, dass dies für Sie Sinn macht, bitte lassen Sie mich wissen, wenn es nicht so ist. Die Konzepte der lokalen Variablen und des Variablenbereichs sind Schlüsselelemente der Grundlage der objektorientierten Programmierung.

+0

Vielen Dank für die wunderbare Erklärung! Ja, es macht Sinn. Ich schätze Ihre Hilfe! – Beth

+0

Ich bin froh, dass ich helfen konnte! – JJT

Verwandte Themen