在Java中输入 - 它是如何工作的?

时间:2011-03-05 23:08:49

标签: java

嘿伙计们,在你们的帮助下,我设法编写了这个很好的代码(我是新手,有点令人兴奋......)) 我仍然不明白如何输入此代码。 首先,我在控制台行中遇到了这个错误(我正在使用Eclipse): 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0     在NumberConverter.main(NumberConverter.java:5)。 这是什么意思?

我只是想查看它是否有效,我无法调用函数/程序。 我过去常常以一种“古老的方式”来打电话,就像在计划中一样,打电话给我写的功能,看看是否有什么事情发生。它在java中如何工作?我们称这个程序本身吗?功能?我们写什么,在哪里写? - 我想查一下它是否有效,无所谓,我很高兴知道如何插入输入。 非常感谢你!

public class NumberConverter{
 public static void main(String[] args) {
       int i = Integer.parseInt(args[0]);
       toBinary(i);
       toOctal(i);
       toHex(i);
   }

   public static void toBinary(int int1){
       System.out.println(int1 + " in binary is");
       System.out.println(Integer.toBinaryString(int1));
   }
   public static void toOctal(int int1){
       System.out.println(int1 + " in octal is");
       System.out.println(Integer.toOctalString(int1));
   }

   public static void toHex(int int1){
       System.out.println(int1 + " in hex is");
       System.out.println(Integer.toHexString(int1));
   }

}

4 个答案:

答案 0 :(得分:4)

这意味着NumberConverter的第5行有一个ArrayIndexOutOfBoundsException。这很可能是这一行(如果完整的源包含一个包含空白行的包语句,那么这将是第5行):

int i = Integer.parseInt(args[0]);

尝试访问您传递给程序的第一个参数,因为您没有将任何参数传递给程序,而arbs数组为空并且尝试访问args[0]会导致ArrayIndexOutOfBoundsException。

如果您从命令行运行它,它应该看起来像这样:

$ java com.mypackage.NumberConverter 1

此处$是提示符,com.mypackage被假定为包名称,1是命令行参数,您可以通过args [0]`访问它。

由于您正在使用eclipse而不是通过命令行here is a nice blog post在eclipse中添加命令行参数。

答案 1 :(得分:2)

你必须为app启动设置参数。您可以在运行配置编辑器中执行此操作(右键单击项目 - >运行方式... - >运行配置)。在Arguments选项卡中,您可以将一个设置为Arguments字段。每行一个参数(例如5)。

发生ArrayIndexOutOfBoundsException是因为您想要获取空数组的第一个元素args的空args[0]数组。你不能这样做,因为如果没有设置app启动参数,那么数组是空的。

答案 2 :(得分:1)

ArrayIndexOutOfBoundsExceptions表示(来自JavaDoc):

  

抛出以指示数组有   被非法索引访问过。   该指数为负数或   大于或等于的大小   数组。

从您的例外情况来看,args[0]会引发ArrayIndexOutOfBoundsExceptions,因为0大于或等于args.length。我的建议是找出操作系统返回到JVM的参数,然后将其传递给您的应用程序,看看args[0]是否已初始化并填充。

此外,从Eclipse运行程序需要您通过Run Configurations设置参数。

答案 3 :(得分:1)

当您尝试访问数组外部的索引时,会引发ArrayIndexOutOfBoundsException。假设我有一个大小为2的数组。我可以分别使用索引0和1访问第一个和第二个元素,但是如果我尝试访问索引4中的元素,则抛出异常:

public static void stam() {
    int[] array = { 0, 1 };
    // this will print 0
    System.out.println(array[0]);
    // this will print 1
    System.out.println(array[1]);

    // this will crash the program
    System.out.println(array[4]);
}

你的直觉是正确的,你可以使用输入轻松测试你的程序,虽然使用文字值和变量可能是一个更容易,当然更灵活的选项。在任何情况下,您都可以通过Run > Run Configurations...窗口设置运行配置以包含命令行参数。

正如您可能猜到的,您的程序崩溃的原因是您尝试访问类的第5行中的第一个命令行参数,但参数不存在,因此该数组有0个元素。

使用命令行参数运行java程序的一种稍微灵活的方法是调用另一个类的main方法,并手动传递一个String数组。但是如果你想快速测试你的方法,只需传递它们的文字值。