线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]
Posted
技术标签:
【中文标题】线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]【英文标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Calculator.main(Calculator.java:25) [duplicate] 【发布时间】:2018-03-05 03:53:32 【问题描述】:我为一个简单的计算器编写了这段代码,但出现了这个错误!请有人帮助我!
public class Calculator
public static void main (String[] args)
int num1 = Integer.parseInt(args[0]);
int num2 = Integer.parseInt(args[1]);
int sum = num1 + num2;
int sub = num1 - num2;
int prod = num1 * num2;
int quot = num1 / num2;
int rem = num1 % num2;
// print the other variables, sub, prod, quot, rem;
System.out.println(num1 + " + " + num2 + " = " + sum);
System.out.println(num1 + " - " + num2 + " = " + sub);
System.out.println(num1 + " * " + num2 + " = " + prod);
System.out.println(num1 + " / " + num2 + " = " + quot);
System.out.println(num1 + " % " + num2 + " = " + rem);
【问题讨论】:
Java != javascript
;)
你怎么打电话给main
?
我建议在主方法的开头添加if (args.length != 2) throw new IllegalArgumentException("Expected 2 arguments, but got: " + Arrays.toString(args))
。这不会解决你的问题,但会给你一个更好的错误信息;-)。
【参考方案1】:
您需要确保当应用程序启动时,它传递了两个可以解析为数字的字符串,因为您的代码假定arguments
将在0
和1
位置有一个元素。如果你不传递两个参数,那么你会得到你的错误。
例如,如果从程序中调用main
:
Calculator.main(new String[] "10","20");
或者,如果从命令行调用Calculator.class
:
java Calculator 10 20
【讨论】:
您通常不会直接调用 main。它是在命令行中传递的 @cricket_007 我知道,我只是想强调这一点,当时正在添加命令行示例。 但是如果我这样做,我会得到更多的错误? @K.Lujan 好的,那么您的代码还有其他问题需要解决。一次拿一个。 @cricket_007 谢谢。我不是 Java 人(我做 C#),所以我知道问题出在哪里,但对语法有点生疏。【参考方案2】:正如异常所示,您的程序在尝试访问索引为 0 内的数组时遇到了数组越界异常。在上面的代码中,唯一被访问索引为 0 的数组的位置是下一行
int num1 = Integer.parseInt(args[0]);
换句话说,您的程序找不到 args 数组的第 0 个索引,这意味着您没有将任何参数传递给您的程序。看起来你的程序实际上有两个参数。如果您使用的是命令行,请按以下方式运行程序
java Calculator 100 200
【讨论】:
以上是关于线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:Calculator.main 中的 0(Calculator.java:25)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Android 异步操作Android 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )