提问人:Anivartin Anand 提问时间:7/9/2020 最后编辑:Anivartin Anand 更新时间:7/9/2020 访问量:1481
是否可以使用 Scanner 调用方法?
Is it possible to call a method using Scanner?
问:
我是 java 的新手,我刚刚学会了使用方法。我编写了一个简单的程序来转换温度:
public class TempConversion {
double temperature;
public TempConversion() {
}
public double celsiusToKelvin(double celsiusTemp) {
temperature = celsiusTemp + 273.15;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public double celsiusToFahrenheit(double celsiusTemp) {
temperature = celsiusTemp * 9 / 5 + 32;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public double fahrenheitToCelsius(double fahrenheitTemp) {
temperature = (fahrenheitTemp - 32) * 5 / 9;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public double fahrenheitToKelvin(double fahrenheitTemp) {
temperature = (fahrenheitTemp + 459.67) * 5 / 9;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public double kelvinToCelsius(double kelvinTemp) {
temperature = kelvinTemp - 273.15;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public double kelvinToFahrenheit(double kelvinTemp) {
temperature = kelvinTemp * 9 / 5 - 459.67;
System.out.println("Converted temperature: " + temperature);
return temperature;
}
public static void main(String[] args) {
TempConversion temp = new TempConversion();
temp.celsiusToFahrenheit(38);
temp.celsiusToKelvin(0);
}
}
但是,现在,为了让程序转换温度,我必须调用代码本身中的每个方法。如果我理解正确,我可以使用 Scanner 类来获取用户输入,那么我如何在使用 Scanner 获取用户输入的同时调用其中一个方法。我不确定我的问题是否有意义,但如果被问到,我可以尝试澄清。
答:
1赞
daenius
7/9/2020
#1
也许这不是最好的解决方案,但我认为它非常生动地解释了 Java 中该函数的有用性。scanner
只需将其复制并粘贴到代码区域中即可:main
public static void main(String[] args) {
TempConversion temp = new TempConversion();
temp.celsiusToFahrenheit(38);
temp.celsiusToKelvin(0);
Double number;
String input;
String output;
Scanner sc = new Scanner(System.in);
System.out.println("Input a number, only double allowed");
number = sc.nextDouble();
sc.nextLine();
System.out
.println("Input the first letter of the source unit. c for celsius, f for fahrenheit or k for kelvin");
input = sc.nextLine();
System.out
.println("Input the first letter of the target unit. c for celsius, f for fahrenheit or k for kelvin");
output = sc.nextLine();
if (input.equals("c")) {
if (output.equals("k")) {
temp.celsiusToKelvin(number);
} else if (output.equals("f")) {
temp.celsiusToFahrenheit(number);
}
} else if (input.equals("f")) {
if (output.equals("c")) {
temp.fahrenheitToCelsius(number);
} else {
temp.fahrenheitToKelvin(number);
}
} else {
if (output.equals("c")) {
temp.kelvinToCelsius(number);
} else {
temp.kelvinToFahrenheit(number);
}
}
sc.close();
}
关于实际工作原理 在互联网上很容易找到它,但是一旦你声明了一个对象,就没有必要每次都声明一个新的对象,就像上面所做的那样,你可以多次重复使用它。Scanner
Scanner
Scanner
一旦你从一个对象更改为另一个对象(在这个问题上是从保留双精度,现在wwe想要一个字符串),你必须清除缓冲区(那里就是那句话)。sc.nextLine();
而且,在这一切之后,请记住关闭扫描仪。这不是强制性的,但如果不是,您将收到“警告”或类似的东西。
评论
0赞
Anivartin Anand
7/9/2020
非常感谢!只是为了确保,System.out.println...应该在一行中,而不是那样断?
0赞
daenius
7/9/2020
@AnivartinAnand 不要担心System.out.println的样式,这就是格式化代码后的样子。如果您在 Eclipse 上工作,只需使用 Ctrl + Shift + F,代码将自动格式化。因为 System 内部的文本很长,所以 Eclipse 会像这样“剪切”System 句子。没什么好担心的!
0赞
Anivartin Anand
7/9/2020
好的,再次感谢!我尝试运行代码,但是当我尝试编译时,它显示了几个错误......那是因为我把它放在错误的地方吗?我没有更改任何内容,只是删除了 main 方法中的两个示例方法调用并将其替换为您的代码。我还在代码的开头添加了import java.util.Scanner(在指定类之前)。我做错了什么吗?
0赞
daenius
7/9/2020
真?多么奇怪,它不应该给你任何错误,确实它对我来说非常有效。我已经更改了我的代码,现在您可以看到所有应该在 .您提供的其余代码位于该部分之外。我不知道这是否是问题所在。main (String [] args)
main
0赞
Anivartin Anand
7/10/2020
这些是我收到的错误: 线程“main”中的异常 java.lang.Error:未解决的编译问题:未定义 TempConversion 类型的 celsiusToFahrenheit(int) 方法 无法解析为类型 无法解析为类型 无法解析为类型 方法 celsiusToFahrenheit(Double) 未为 TempConversion 类型定义 fahrenheitToCelsius(Double) 方法未为 TempConversion 类型定义 fahrenheitToKelvin(Double) 方法未为 TempConversion 类型定义对于类型 TempConversion 未定义方法 kelvinToFahrenheit(Double)
评论