定义用于多种方法的变量

Defining Variables for use in multiple methods

这个问题让我束手无策。现在在 class 中,为了这个作业,我需要使用扫描仪输入数据,并在我的嵌套方法中使用相同的数据来计算两件事;温度换算和货币换算。

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

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

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

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

static double euro;

在方法之外,在 class 级别。

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

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

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()));

如果你想要定义一个class级变量,你可以在class的正文中添加一个static变量]:

static double euro;

并在您的方法中使用它。

在 readDouble() 方法中,您返回了一个双精度值,但您没有在 performTemperatureConversion() 和 performCurrencyConversion() 方法中的任何地方取回该值。 如果您想在整个 class 中使用相同的值,请声明一个静态变量并在其中获取扫描仪值,而不是在方法中使用局部变量。 在 degreeConversion() 和 currencyConversion() 方法中传递相同的值。

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

这意味着您 class 中的任何方法都可以 "see" 它(即可以使用该值或更新该值。

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

按照惯例,在大多数情况下,您会希望它成为一个私有成员变量,因此您会希望这样做:

// 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()。

据我了解,您希望 numDouble 和 tC 这两个变量在所有这些方法中都可见。显然你使用关键字 "double" 更像是一个变量导入,类似于 PHP.

中的关键字 "global"

但是您的代码实际上确实声明了局部变量方法并在方法末尾将其丢弃。这样你就不能在多个方法调用中共享变量。解决此问题的最简单方法是在 class 级别定义两个静态方法:

package Whosebug;

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

顺便说一句:您还忘记关闭输入变量。我解决了这个问题。