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