在命令行中使用字符串

时间:2014-05-14 00:58:38

标签: java

我再次。我必须编写一个程序,使用学校的命令行将华氏温度转换为摄氏温度,反之亦然。我对代码很陌生,我无法解决问题。

我有这段代码

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)

编译时我没有收到任何错误

3 个答案:

答案 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);
    }       
}