在Array索引的上下文之外,当用户输入超出程序要求范围的数字时,Java中是否存在任何异常?
即。程序想要一个0到100之间的整数,用户输入132,手动抛出异常还是必须自定义?
编辑:我知道为此使用例外是没有意义的,它是一项任务,我想知道我的选择。轻松的头发引发了选民。
答案 0 :(得分:3)
您可以抛出IllegalArgumentException
答案 1 :(得分:1)
如果你特别想为此使用异常处理,那么你应该为它定义自己的自定义异常,而不是重用标准的Java异常。这样你可以肯定你只是抓住你的特定情况。如果确实定义了异常,则需要手动抛出并捕获它。
请注意,我在这里特指的是与您希望处理的用户条目相关的异常。 Java有一组很好的异常来处理代码内部的错误(例如空指针异常)。
说过这似乎不是一个例外的好用例。您的代码应该考虑用户在正常使用中可能输入的每个值。异常处理最好保留用于处理正常操作例外的事物。
答案 2 :(得分:1)
Java Language Specification, regarding Integer Operations说:
整数运算符不以任何方式表示溢出或下溢。
整数运算符可以抛出异常(第11节),原因如下:
如果需要空引用的拆箱转换(第5.1.8节),任何整数运算符都可以抛出NullPointerException
。
如果右侧操作数为零,则整数除法运算符/(第15.17.2节)和整数余数运算符%(第15.17.3节)可以抛出ArithmeticException
。
增量和减量运算符++(§15.14.2,§15.15.1)和 - (§15.14.3,§15.15.2)如果装箱转换可以抛出OutOfMemoryError
§5.1.7)是必需的,并且没有足够的可用内存来执行转换。
我不是“异常驱动架构”的粉丝,;)
实施检查整数是否超过100并返回错误,状态代码等作为用户/系统等的反馈。
答案 3 :(得分:1)
例外是昂贵的。应该使用一些廉价的测试函数或制作一个只接受你想要的范围的包装类并带有一个"错误"通过所有计算变量到最后。您在结束时检查该错误,将其追溯到源。行驶错误使得可以同时看到多个错误,而不仅仅是发生在第一个错误发生时。
public class IntegerWithError
{
int result;
int error;
int errorSource;
// some methods to check for range, alter "error" as needed.
// some methods to sign the start point of error
}
private static IntegerWithError Test(int parameter)
{
IntegerWithError iwe=new IntegerWithError();
if(parameter>5)
{
iwe.error=1;
iwe.errorSource=iwe.hashCode();
}
iwe.result=parameter;
return iwe;
}
....
ParameterWithError p1,p2;
....
MatrixMultiplyWithError(p1,p2);
RenderWithErrors(p1,p2,b1,b1);
TraceError(p1); // finds if it was a function, a constructor or something.