Array方法中的ArrayIndexOutOfBoundsexception
我收到了数组绑定错误但是在我看来,数组从0开始,所以这段代码有什么问题?
public class Quadratic { public static void main(String[] args) { double b = Double.parseDouble(args[0]); double c = Double.parseDouble(args[1]); double discriminant = b*b - 4.0*c; double sqroot = Math.sqrt(discriminant); double root1 = (-b + sqroot)/ 2.0; double root2 = (-b - sqroot)/ 2.0; System.out.println(root1); System.out.println(root2); } }
保护自己:保持防守。
public class Quadratic { public static void main(String[] args) { if (args.length> 1) { double b = ((args.length > 0) ? Double.parseDouble(args[0]) : 0.0); double c = ((args.length > 1) ? Double.parseDouble(args[1]) : 0.0); double discriminant = b*b - 4.0*c; double sqroot = Math.sqrt(discriminant); double root1 = (-b + sqroot)/ 2.0; double root2 = (-b - sqroot)/ 2.0; System.out.println(root1); System.out.println(root2); } else { System.out.println("two arguments are required: b and c, please"); } } }
如果判别式是否定的,会发生什么? 如果它是零怎么办?
你为什么要把自己限制在a = 1的情况下?
args [0]和/或args [1]中没有项目。 您需要检查数组中是否有足够的参数。
double b = args.length>=1?Double.parseDouble(args[0]):0.0; double c = args.length>=2?Double.parseDouble(args[1]):0.0;
如果数组中没有参数,则表示您没有将参数传递给程序,或者您没有传递足够的参数。
尝试并调试它。 使用System.out.println(args.length);
打印args的大小System.out.println(args.length);
。 如果尺寸小于2那么你没有得到主类的参数。
当您尝试在数组中的错误位置提取变量时,会发生ArrayIndexOutOfBoundsexception。
当您在编译ex javac hello
之后在java中运行程序然后通过java hello
执行类文件时, args[0]
的第0个位置将是文件名,即在这种情况下为hello
。
为了成功提取在运行时发出的参数,您必须在数组中使用n + 1位置。 例如。 如果我正在运行我的程序作为java hello argument
我将使用args[1]
如果我希望在运行时使用已发布的变量argument
,依此类推以提取相关文本。
如果您不确定您的语句是否会生成exception,那么使用try & catch
block总是安全的.Read – exception处理