2017-09-16 9 views
0

私はクラスとメソッドについて学ぶだけの学生です。私はエラーを受け取りました(行30 - 節約= pr *割引/ 100) "シンボルを見つけることができません"。私は可変割引が範囲外であることを理解していますが、これを修正する方法を理解することはできません。私は私に与えられた指示に従ったが、それでも動作していない。私はすでに教科書にいくつかのタイプミスを犯しているので、何か不足していますか?それとも、私の中括弧の配置ですか?JAVA範囲外の変数

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

修正するのは簡単な問題です。私は以下の答えを加えました。 – Assafs

+0

ちなみに、私の答えで問題が解決した場合は、その脇のグレーのチェックマークをクリックして緑色にしてください。 – Assafs

+2

これを、変数名から母音を削除するのはひどい考えです。 –

答えて

1

あなたのコードは正しいです - スコープ変数dscntが必要なときに範囲外変数割引と呼ばれたばかりです。これを試してください:あなたはあなたの質問で述べたように

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

問題は、変数discountがスコープ外であること、によって引き起こされます。なぜそれを見てみましょう。

元のコードでは、メソッドcomputeDiscountInfo(double pr, double dscnt)がパラメータに渡されます:2つのラベルはpr、もう1つはdscntという2つのラベルが付けられています。あなたのメソッドは、これらの2つのパラメータの知識しか持ちません。 (「静的な」変数や親から渡された変数など、いくつかの例外がありますが、現時点ではあなたの学習の範囲を超えている可能性が最も高いです。 )

discountメソッドはmain()メソッドで宣言されているため、メソッドにそのメソッドの存在を知らせる方法はありません。このメソッドでcalを使用すると、使用するパラメータとしてdiscount変数を渡すことができます(コードではsavings = computeDiscountInfo(price, discount);と同じです)。discountの値は、そのローカル変数dscntに適用されます。メソッドの宣言。これは、メソッドが知り、使用する変数です。

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

をメソッドのパラメータで宣言されているようにあなたがいないローカル名dscntにより、discountとして変数を参照してください。この方法では:

は今、あなたの方法を振り返ることができます。この方法は、discountの意味を理解していません。この場所では二重に渡すことができます。あなたのメソッド内でdiscountという単語をdscntに変更することで、このメソッドはあなたが何をしているのかを理解し、その値を適切に使用することができます。

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

これがあなたにとって意味をなされることを希望しますが、そうでない場合は教えてください。ローカル変数と可変スコープの概念は、オブジェクト指向プログラミングの基礎の重要な部分です。

+0

すばらしい説明をいただきありがとうございます!はい、それは理にかなっています。私はあなたの助けに感謝します! – Beth

+0

うれしい私は助けることができました! – JJT