我收到的数组索引错误超出下面的代码...为什么?

时间:2015-05-13 16:57:51

标签: java exception exception-handling indexoutofboundsexception

为什么我的数组索引超出了此代码的范围? 我在线程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");
}
}

}

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

一般情况下,如果要编写依赖于命令行输入的代码,那么在开始时进行一些检查是一种很好的做法。例如,

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

答案 2 :(得分:0)

要详细说明评论,您的args数组似乎有长度&lt; 3.要确认这一点,请添加System.out.println("args has length: " + args.length)作为主函数的第一行,并查看打印的内容。如果结果小于3,那么当您尝试访问ArrayIndexOutOfBoundsException时,您将获得args[2](如果长度更短,则会获得其他人)。

有关ArrayIndexOutOfBoundsExceptions的更多信息,请访问:What causes a java.lang.ArrayIndexOutOfBoundsException and how do I prevent it?

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

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

答案 3 :(得分:0)

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");
            }
            }

    }