定义用于多种方法的变量

时间:2015-03-10 20:29:07

标签: java scope

我一直在努力解决这个问题。在一个类中,对于这个赋值,我需要使用Scanner输入数据并在嵌套方法中使用相同的数据来计算两件事;温度转换和货币转换。

我遇到的问题是我不知道如何在我的整段代码中定义我的变量,因为我得到编译器错误,说某些变量没有定义;例如tCeuro

如何分配这两个变量才能正确编译?

import java.util.Scanner;

public class MethodsMS {

    // required main method of the class
    public static void main(String [] args) {

        performTemperatureConversion();
        System.out.println();  // blank line
        performCurrencyConversion();

        double numDouble;


    } // end main

    // (no changes needed above this point)
    //--------------------------------------------------------------
    // (write the following methods)

    //--------------------------------------------------------------

    // write method to perform temperature conversion...
    public static void performTemperatureConversion() 
    {
        double numDouble;
        readDouble();
        degreeConversion();
        display();

    }

    //--------------------------------------------------------------

    // write method to perform currency conversion...
    public static void performCurrencyConversion() 
    {
        readDouble();
        currencyConversion();
        display();

    }

    //--------------------------------------------------------------

    // write method to obtain an input double value (use Scanner)...
    public static double readDouble()
    {
        double numDouble;
        Scanner input = new Scanner(System.in); 
        System.out.print("Enter a double number: ");
        numDouble = input.nextDouble();

        return numDouble;

    }

    //--------------------------------------------------------------

    // write method to print an input string inside a formatted box...
    public static void display()
    {
        System.out.print("Conversion number is now: " + numDouble);
    }

    //--------------------------------------------------------------

    // write method to convert F to C...
    public static void degreeConversion()
    {
        double numDouble, tC;
        tC = (numDouble - 32) * 5/9;

        return;

    }
    //--------------------------------------------------------------

    // write method to convert $ to Euros...
    public static void currencyConversion()
    {
        double euro;
        euro = numDouble * 0.894614;

        return euro;
    }
} // end class

5 个答案:

答案 0 :(得分:3)

此特定示例不需要任何类级变量,因为您可以使用方法返回类型和参数。

currencyConversion方法应该像这样定义:

public static double currencyConversion(double num)
{
    return num * 0.894614;
}

performCurrencyConversion中使用如下:

display(currencyConversion(readDouble()));

同样适用于display

public static void display(double num)
{
    System.out.print("Conversion number is now: " + num);
}

为了完整起见,您的degreeConversion

public static double degreeConversion(double num)
{
    return (num - 32) * 5 / 9;
}

performTemperatureConversion

display(degreeConversion(readDouble()));

如果执行想要定义类级变量,可以在类的主体中添加static变量:

static double euro;

并在你的方法中使用它。

答案 1 :(得分:1)

您可以将其声明为类成员,而不是在方法中声明(例如:double euro;):

static double euro;

在方法之外,在班级。

这适用于eurotC,但我需要建议this is not the best way to use java, as it is an Object-Oriented language。但我相信你会到达那里:)。

答案 2 :(得分:0)

在readDouble()方法中,您返回一个double值,但是您没有在performTemperatureConversion()和performCurrencyConversion()方法中的任何位置返回该值。 如果要在整个类中使用相同的值,请声明一个静态变量并在其中获取扫描器值,而不是在方法中使用局部变量。 在方法degreeConversion()和currencyConversion()中传递相同的值。

答案 3 :(得分:0)

您需要将numDouble变量作为类成员变量。

这意味着您班级中的任何方法都可以“看到”它(即可以使用该值或更新该值。

要做到这一点,只需在方法之外定义变量,但仍然在类本身内。

按照惯例,在大多数情况下,您会希望这是一个私有成员变量,因此您需要执行以下操作:

// Defined here as a private member variable
private double numdouble;

public static double readDouble()
{
  // numDouble definition removed here, no need.
  Scanner input = new Scanner(System.in); 
  System.out.print("Enter a double number: ");
  numDouble = input.nextDouble();
  return numDouble;
}

然后你需要确保在使用numDouble之前调用这个readDouble()。

答案 4 :(得分:0)

据我所知,你想成为numDouble和tC两个变量在所有这些方法中都可见。显然,您使用关键字“double”更像是类似于PHP中关键字“global”的变量导入。

但是你的代码确实将变量方法声明为local,并在方法结束时将其抛弃。这样您就无法通过多个方法调用共享变量。解决此问题的最简单方法是在类级别定义两个静态方法:

package stackoverflow;

import java.util.Scanner;

public class MethodsMS {

private static double numDouble, tC, euro;

// required main method of the class
public static void main(String[] args) {

    performTemperatureConversion();
    System.out.println(); // blank line
    performCurrencyConversion();
} // end main

// (no changes needed above this point)
// --------------------------------------------------------------  
// (write the following methods)

// --------------------------------------------------------------

// write method to perform temperature conversion...
public static void performTemperatureConversion() {
    readDouble();
    degreeConversion();
    display();
}

// --------------------------------------------------------------

// write method to perform currency conversion...
public static void performCurrencyConversion() {
    readDouble();
    currencyConversion();
    display();
}

// --------------------------------------------------------------

// write method to obtain an input double value (use Scanner)...
public static double readDouble() {
    try (Scanner input = new Scanner(System.in)) {
        System.out.print("Enter a double number: ");
        numDouble = input.nextDouble();
    }

    return numDouble;

}

// --------------------------------------------------------------

// write method to print an input string inside a formatted box...
public static void display() {
    System.out.print("Conversion number is now: " + numDouble);
    System.out.print("tC is now: " + tC);
    System.out.print("Euro is now: " + euro);
}

// --------------------------------------------------------------

// write method to convert F to C...
public static void degreeConversion() {
    tC = (numDouble - 32) * 5 / 9;
}

// --------------------------------------------------------------

// write method to convert $ to Euros...
public static void currencyConversion() {
    euro = numDouble * 0.894614;
}

} // end class

BTW:你也忘了关闭输入变量。我修好了。