线程“主”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 将在01 位置有一个元素。如果你不传递两个参数,那么你会得到你的错误。

例如,如果从程序中调用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 线程切换 ( 判定当前线程是否是主线程 | 子线程中执行主线程方法 | 主线程中执行子线程方法 )

子线程怎么不阻塞主线程

QT中UI主窗口如何与子线程相互传递参数

java 子线程 回调 主线程

C++怎么在主线程中使用子线程的数据? 比如说主线程中有一个数组,如何在子线程中调用这个数组