我再次。我必须编写一个程序,使用学校的命令行将华氏温度转换为摄氏温度,反之亦然。我对代码很陌生,我无法解决问题。
我有这段代码
public class Temperature {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++)
{
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println ("Veuillez specifier c (celsius) ou f (fahrenheit) suivi de la température. Exemple argc arg32");
if (args[0].equals ("c"))
{
/*convertir en fahrenheit*/
double z = (1.8 * b) + 32;
System.out.print ("La température est" + z);
}
else if (args[0].equals ("f"))
{
/*convertir en celsius*/
double y = (b - 32)/1.8;
System.out.print("La température est" + y);
}
}
}
}
我的想法是使用命令行首先选择单位然后选择温度
java Temperature c 35
但是当我尝试它时,我遇到了一堆错误。我的猜测是我无法在命令行中使用字符串? c是一个字符串?
我收到了错误
线程中的异常&#34; main&#34; java.lang.NumberFormatException:对于输入字符串:&#34;&#34;
at java.lang.NumberFormatException.forInput.String(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Temperature.main(Temperature.java:12)
编译时我没有收到任何错误
答案 0 :(得分:3)
int a = Integer.parseInt(args[0]);
这会给你一个例外,你试图将一个String解析为一个整数
将其更改为
String unitChar = args[0];
此外,一旦您将参数读入变量,请将其用于比较,而不是从参数
再次访问它e.g。
if (unitChar.equals("c"))
答案 1 :(得分:0)
int a = Integer.parseInt(args[0]);
是否为您提供错误的行。您正在尝试从不是数字的字符串中解析int。您似乎没有在代码中使用a
,因此我将其删除。如果您仍然需要它,只需按照VD的答案中的建议进行操作,然后使用此行:
String unitChar = args[0];
答案 2 :(得分:0)
以下是我写它的方式......
你循环遍历代码的for循环两次,我假设你想检查String []的长度。
接下来我拿了第一个arugment String [0]并调用了toLowerCase方法。这是为了用户可以输入'C'或'c'或'F'或'f'。
接下来,我将if和else if语句更改为switch语句。这是更个人的偏好,但是它阻止你编写大量的if语句。此外,默认子句是,如果用户输入的字符不是“c”或“f”,则可以提醒用户。
System.exit语句非常适合您,但是当您需要编写更大的程序时,最好使用错误代码退出程序,以便以后跟踪它。 System.exit(0)通常用作程序按需工作。
public class Temperature
{
public static void main(String[] args)
{
if (args.length == 2)
{
String a = args[0].toLowerCase();
int b = Integer.parseInt(args[1]);
System.out.println ("Veuillez specifier c (celsius) ou f (fahrenheit) suivi de la température. Exemple argc arg32");
switch(a)
{
case: "c"
/*convertir en fahrenheit*/
double z = (1.8 * b) + 32;
System.out.print ("La température est" + z);
break;
case: "f"
/*convertir en celsius*/
double y = (b - 32)/1.8;
System.out.print("La température est" + y);
break;
default:
System.out.println("the first argument needs to be 'c' for celsius or 'f' for fahrenheit");
System.exit(-1);
}
}
else
{
System.out.println("Not enough arguments passed in.");
System.exit(-1);
}
System.exit(0);
}
}