我一直在努力解决这个问题。在一个类中,对于这个赋值,我需要使用Scanner输入数据并在嵌套方法中使用相同的数据来计算两件事;温度转换和货币转换。
我遇到的问题是我不知道如何在我的整段代码中定义我的变量,因为我得到编译器错误,说某些变量没有定义;例如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
答案 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;
在方法之外,在班级。
这适用于euro
和tC
,但我需要建议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:你也忘了关闭输入变量。我修好了。