检查一个字符串是否是一个有效的数字:ArrayIndexOutOfBoundsException异常

问题描述:

,我读了一本书,一个代码,它说的是,为了检查一个给定的字符串是否包含一个有效的数字,如果是这样,将其转换为二进制(内部)的形式,代码应该写成如下:检查一个字符串是否是一个有效的数字:ArrayIndexOutOfBoundsException异常

public class Exercise5 
{ 
    public static void main(String args[]) 
    { 
     String aNumber = args[0]; 
     double result; 
     try { 
      result = Double.parseDouble(aNumber); 
      System.out.println("Number is " + result); 
     } catch (NumberFormatException exc) { 
      System.out.println("Invalid number " + aNumber); 
      return; 
     } 
    } 
} 

但正如我复制的代码和编译它,它会导致具有java.lang.ArrayIndexOutOfBoundsException。你认为这个问题可能是什么?

+0

你应该通过aNumber的当你运行它时 – 2014-11-03 13:01:32

+0

如果你不提供程序参数,'args [0]'的内容应该来自哪里? – Tom 2014-11-03 13:02:12

您正在访问的唯一阵列是形式参数。您正在访问该数组的第一个元素而不检查它是否为空。该数组包含传递给Java应用程序的命令行参数。

你应该访问前检查数组:

String aNumber = null; 
    if (args.length > 0) 
     aNumber = args[0]; 

你应该传递一个参数到您的程序。

+1

谢谢。那么我应该在代码上添加什么? – MarshallLee 2014-11-03 13:02:27

它似乎做工精细,我只是编译并运行它,而运行你给作为命令行参数是多少? ,它工作得很好

来看,它从你的终端这样

java Exercise5 56 

Number is 56.0 

如果你不知道你给正在运行的程序,而被称为命令行参数的参数,例如,如果你说 的Java myprogname 5 6 7

在主你

args[0]=5, 
args[1]=6 ... 

那么当您运行java文件传递的期望数量为字符串。

java Exercise5 123 
       ↑ 
       args[0] 

,但如果你运行而没有经过值,那么args[0] doesn't exist因为在ARGS []数组。它的empty array没有元素。所以你得到了errorjava.lang.ArrayOutOfBoundException

java Exercise5 
       ↑ 
       args[0] //Exception 

目标这个程序是检查字符串的数字或不..

所以如果你运行你的程序将字符串传递WH ICHü要查一个号码或没有,那么你将获取输出。如何使用该程序

java Exercise5 5 

输出>>Number is 5.0

java Exercise5 a 

输出>>Invalid number a