java - 方法不适用于数组的所有元素
问题描述
更新
我需要指导。目标是显示温度的转换。输入在命令行由一个字符组成,f(代表华氏度)或 c,后跟一系列整数(例如 f 100 250 98),然后将其存储在整数数组中。
输出应为“转换为摄氏度 xy z 的整数”。我下面的内容不能正确转换整数(位于命令行 args[1]、args[2]、...)。我运行输入的命令行参数“f 1500”,显示的结果是“1 个整数转换为摄氏度:-17.2”。-17 摄氏度是 0 华氏度,这显然是不正确的。
我想要关于我做错了什么的指导。我不需要实际的代码行作为答案本身,只是为了引导我朝着正确的方向前进。
import java.util.Scanner;
public class Cel2Far
{
public static void main(String[] args)
{
int[] temperature = new int[args.length];
callAndDisplay(args,temperature);
} // main
private static void callAndDisplay(String[] args, int[] temperature)
{
getTemps(args,temperature);
switch(args[0]) {
case "f":
System.out.printf("%,d %s converted to Celsius: ",
(temperature.length-1),(temperature.length-1) > 1 ?
"temperatures" : "temperature");
for (int i = 1; i < temperature.length; i++) {
System.out.printf("%,.1f ", celsius(temperature[i]) );
}
break;
case "c":
System.out.printf("%,d %s converted to Fahrenheit: ",
(temperature.length-1),(temperature.length-1) > 1 ?
"temperatures" : "temperature");
for (int i = 1; i < temperature.length; i++) {
System.out.printf("%,.1f ", fahrenheit(temperature[i]) );
}
break;
}
System.out.println();
}
private static boolean getTemps(String[] args, int[] temperature)
{
boolean message = false;
if (! (args[0].equals("c") || args[0].equals("f")) ) {
message = false;
} else {
for (int i = 0; i < args.length; i++) {
temperature[i] = Integer.parseInt(args[i]);
message = true;
}
}
return message;
}
private static double celsius(int f)
{
double c = 5.0 / 9.0 * (f - 32.0);
return c;
}
private static double fahrenheit(int c)
{
double f = 9.0/5.0 * c + 32.0;
return f;
}
} // class
解决方案
你似乎把事情复杂化了。在您当前的示例中给出了 2 个输入(第一个是格式c
/ f
,第二个是实际值),您可以使用以下函数:
private static double convert(String format, double temperature){
switch(format){
case "f":
return toCelsius(temperature);
case "c":
return toFahrenheit(temperature);
default:
throw new UnsupportedOperationException();
}
}
private static double toCelsius(double f){
return 5. / 9. * (f - 32.);
}
private static double toFahrenheit(double c){
return 9./5. * c + 32.;
}
然后从您的主要方法轻松调用它:
public static void main(String[] args){
System.out.println(convert(args[0], Double.parseDouble(args[1]));
}
如果您想一次支持多个输入,这也可以很容易地扩大。具有 1 种格式和多种温度 ( f 20 53 63 74
):
public static void main(String[] args){
String format = args[0];
for(int i = 1; i < args.length; i++){
System.out.println(convert(args[0], Double.parseDouble(args[i]));
}
}
或使用交替转换 ( c 56 f 734 f 547 c 598
):
public static void main(String[] args){
for(int i = 0; i < args.length; i++){
System.out.println(convert(args[i], Double.parseDouble(args[i+1]));
}
}
当然,在所有这些解决方案中,您必须确保将输入参数提供给程序。args
例如,通过检查数组的长度。
推荐阅读
- node.js - 未捕获的 ReferenceError: __webpack_dev_server_client__ 未定义
- c++ - 不同类的构造函数重载解析
- hyperlink - 如何在招摇文档中链接和引用自我?
- stripe-payments - 如何在条带元素中填充已保存的卡值?
- ruby - Cromedriver `driver.manage.logs.get(:browser)` 在 chromedriver 75.0.3770.8 上失败
- python-3.6 - 运行 python xlwings 库并失败 COMRetryObjectWrapper(DispatchEx('Excel.Application'))
- react-native - 在显示未处理的承诺拒绝时反应未定义的本机导航
- c# - 如何获取传递给我的函数的参数名称?
- powershell - Powershell 上的功能比较
- rust - 将 Option 实例从 Some 设置为 None 会触发内部值的删除吗?