JAVA变量超出范围

时间:2017-09-16 16:27:13

标签: java

我是一名学生,只是学习班级和方法。我收到一个错误(第30行 - Saving = pr * discount / 100)"找不到符号"。我明白我的变量折扣超出了范围,但我无法弄清楚如何纠正这个问题。我按照提供给我的说明,但它仍然无法正常工作。我已经在教科书中发现了一些错别字,所以有什么遗漏?或者是我对大括号的定位?

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.");  
    }   
}   

2 个答案:

答案 0 :(得分:1)

您的代码是正确的 - 当您需要范围变量dscnt时,您只需调用超出范围变量折扣。试试这个:

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

答案 1 :(得分:1)

问题是由于您在问题中提到的,变量discount超出了范围。让我们来看看为什么。

在原始代码中,方法computeDiscountInfo(double pr, double dscnt)被传递给参数:双重标记为pr,另一个双重标记为dscnt。你的方法只会知道这两个参数,而不会知道它们之外发生的任何事情。 (这有一些例外情况,例如静态变量或从父母传来的变量。但是,这些很可能超出了你目前学习的范围。我确定你他们很快就会在学校报道。)

由于变量discount是在main()方法中声明的,因此您的computeDiscountInfo(double pr, double dscnt)方法无法知道它是否存在。当您使用此方法时,可以将discount变量作为要使用的参数传递给您(就像您在代码中使用savings = computeDiscountInfo(price, discount);那样)然后该方法将应用{{1}的值它在方法声明中定义的自己的局部变量discount。这是该方法将知道和使用的变量。

现在,让我们回顾一下你的方法:

dscnt

在此方法中,您将变量称为public static double computeDiscountInfo(double pr, double dscnt) { double savings; savings = pr * discount / 100; return savings; } ,而不是方法参数中声明的本地名称discount。该方法不了解dscnt的含义。它可以在这个地方传递任何两倍。通过将方法中的单词discount更改为discount,该方法将能够了解您正在处理的内容并正确使用该值。

dscnt

我希望这对你有意义,如果没有,请告诉我。局部变量和变量范围的概念是面向对象编程基础的关键部分。