嘿伙计们,在你们的帮助下,我设法编写了这个很好的代码(我是新手,有点令人兴奋......)) 我仍然不明白如何输入此代码。 首先,我在控制台行中遇到了这个错误(我正在使用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));
}
}
答案 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数组。但是如果你想快速测试你的方法,只需传递它们的文字值。