【问题标题】:i am getting an error of array index out of bounds for the code below...why?我收到以下代码的数组索引超出范围的错误...为什么?
【发布时间】:2015-07-25 02:33:30
【问题描述】:

为什么我的数组索引超出了这段代码的范围? 我在线程 MainJava.Lang.ArrayIndexOutOfBoundsException 中遇到错误异常

//java calculator
public class Calculator
{
public static void main(String[] args)
{
double a,b,m;
char c;
a=Double.parseDouble(args[0]);//taking input from command line
c=args[1].charAt(0);
b=Double.parseDouble(args[2]);
switch(c)//using switch to perform calc operations
{
case('+'):
           m=a+b;
           System.out.println(args[0]+args[1]+args[2]+"="+m);
           break;
case('-'):
           m=a-b;
           System.out.println(args[0]+args[1]+args[2]+"="+m);
           break;
case('*'):
           m=a*b;
           System.out.println(args[0]+args[1]+args[2]+"="+m);
           break;     
case('/'):
           m=a/b;
           System.out.println(args[0]+args[1]+args[2]+"="+m);
           break;
default:
          System.out.println("invalid option");
}
}

}

【问题讨论】:

  • 你有没有传入任何参数?
  • 很清楚,你没有args[0]/args[1]/args[2] 我们不知道是哪个,因为你没有发布堆栈跟踪,你只是告诉我们错误。
  • 另外,请花时间格式化您的代码。我认为它真的在您的屏幕上看起来不像 - 使用预览以确保您的帖子在发布之前 可读。

标签: java exception exception-handling indexoutofboundsexception


【解决方案1】:

如果你传递命令行参数,代码就可以正常工作。

您可以通过右键单击 Eclipse 中的 Calculator.java 文件并运行为 > 运行配置来向类添加参数。在那里,您可以单击参数选项卡并将参数手动添加到程序参数中。

或者,您可以在命令提示符下运行它并以这种方式传递参数。

在命令行:java Calculator 5 + 1

更多详情请点击此处:https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html

如果您不打算使用命令行参数,您可以使用 Scanner 对象来设置变量 a、b 和 c。

Scanner input = new Scanner(System.in);
a = input.nextDouble();
c = input.next().charAt(0);

【讨论】:

    【解决方案2】:

    一般来说,如果您要编写依赖于命令行输入的代码,最好在开始时进行一些检查。例如,

    if (args.length < 3)
        System.out.println("Insufficient Arguments");
    else {
        //The rest of your code
    }
    

    【讨论】:

      【解决方案3】:

      要详细说明 cmets,您的 args 数组的长度似乎可能 System.out.println("args has length: " + args.length) 添加为 main 函数的第一行并查看打印的内容。如果结果小于 3,那么当您尝试访问 args[2] 时,您将获得一个 ArrayIndexOutOfBoundsException(如果长度更短,则为其他人)。

      更多关于 ArrayIndexOutOfBoundsExceptions 的信息在这里:What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?

      从那里开始,问题变成了“如果我没有有足够的论据怎么办?”。抛出异常可能不是理想的答案。其他一些选项包括:

      • 为变量提供默认变量(因为用户没有提供它们),然后照常继续
      • 打印更具描述性的错误消息并终止

      【讨论】:

        【解决方案4】:

        Java 代码 使用扫描仪功能接受输入。

         public class TestProgram {
        
                public static void main(String args[]){
                    double a,b,m;
                    char c;
                    System.out.println("Enter the first number");
                    Scanner scanner = new Scanner(System.in);
                    a=Double.parseDouble(scanner.next());//taking input from command line
                    System.out.println("Enter the operation you want to perform + or - or * or /");
                    c=scanner.next().charAt(0);
                    System.out.println("Enter the second number");
                    b=Double.parseDouble(scanner.next());
                    switch(c)//using switch to perform calc operations
                    {
                    case('+'):
                               m=a+b;
                               System.out.println(a +"+"+ b +"="+ m);
                               break;
                    case('-'):
                               m=a-b;
                               System.out.println(a +"-"+ b +"="+ m);
                               break;
                    case('*'):
                               m=a*b;
                               System.out.println(a +"*"+ b +"="+ m);
                               break;     
                    case('/'):
                               m=a/b;
                               System.out.println(a +"/"+ b +"="+ m);
                               break;
                    default:
                              System.out.println("invalid option");
                    }
                    }
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-10-11
          • 2022-11-24
          • 2013-05-18
          • 2015-09-12
          • 2021-07-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多