【问题标题】:How to throw an exception for large integer inputs in java?如何在java中为大整数输入抛出异常?
【发布时间】:2015-07-18 17:57:12
【问题描述】:

我有一个特定的代码,我在其中输入两个整数。但是,我尝试将 try catch 方法与 throws IOException 一起使用,但它没有帮助。如果任何输入数字非常大,例如 12345678910 - 一个大于 10 位的数字,我想要做的是抛出一个错误,这样我的代码就不会抛出错误。由于机密性,我不能透露代码,但我认为代码不是必需的。有什么建议么?提前致谢。

【问题讨论】:

  • 请澄清输入的数字大于5位(32位).
  • 您的问题很不清楚:“但是,我尝试使用 try catch 方法和 throws IOException 但它没有帮助”帮助什么? “我想要做的是抛出一个错误,如果......这样我的代码就不会抛出一个错误”也很令人困惑。 “但我认为此代码不需要此代码”实际上代码示例在这里会很棒,您不必输入原始代码,SSCCE 会更好。
  • 对不起,请检查编辑,谢谢。
  • 现在看起来您应该将值读取为字符串(或者可能是 BigInteger)。然后你可以验证它并抛出你的异常。
  • 您是如何获得输入的?通过scanner.nextInt()?在这种情况下,如果输入大于Integer.MAX_VALUE,该方法将自动抛出InputMismatchError。为什么要捕获它并抛出另一个异常?

标签: java exception input integer runtime


【解决方案1】:

int 可以容纳的最大值小于最大的 10 位数字。 它是 2,147,483,647。因此,输入一旦存储在 int 变量中就会无效。

对于小于该边界的整数,例如 5 位,您可以使用它。

创建一个新的Exception 类:

public class CustomException extends Exception
{
  public CustomException(String message)
  {
    super(message);
    //handle the exception here.
  }
}

然后从您正在使用的方法中声明一个 throws CustomException

public void myMethod(int a, int b) throws CustomException {

if(a > 99999 || b > 99999) {
    throw new CustomException("write what message you want printed");
    return;
}

//do your stuff here

}

或者如果您想在输入非常大的数字时立即检查异常

假设您使用Scanner 接收号码。以String 形式输入。然后尝试通过检查将其转换为整数形式。

Scanner sc = new Scanner(System.in);

String number = sc.nextLine();
int num;
double holder = String.valueOf(number);

if(holder>Integer.MAX_VALUE) {
     throw new Exception();
} else
num = (int) holder;

这似乎是一种非常迂回的方式,但它适用于任何长度的数字。

你也必须对另一个数字做同样的事情,这样你就可以把逻辑放在一个方法中。

【讨论】:

    【解决方案2】:

    一种方法是通过将整数转换为字符串来检查长度,另一种方法是检查范围并抛出错误消息

    例子:

    Scanner in = new Scanner (System.in);
    int input = nextInt();
    
    String temp = Integer.toString(input);
    
    if(temp.length > 5 )
    throw new IllegalArgumentException ("The value is larger than 5 digits! ");
    

    【讨论】:

    • 输入无效,整数值超出范围:12345678910。它甚至在到达代码之前就抛出错误。
    • 我认为问题的范围和值大于 5 位。
    【解决方案3】:

    至于 Sotirios Delimanolis,你的问题让我大吃一惊。如果您的意思是如果 int 是 6 位数字(表示百万)则需要抛出错误,那么您正在寻找这样的东西:

     public void checkUnderMillion(int integer) throws IOException {
            if (integer >= 1000000) {
                throw new IOException("Invalid input");
            }
        }
    

    如果我理解你的问题,那应该会有所帮助。

    【讨论】:

    • if (integer <= 1000000)如果输入小于等于1,000,000抛出异常?
    • 感谢贝雷斯福德。是一个错字。对于@kaushaya,如果您使用布尔值会更好。将 void 更改为布尔值。取出投掷物。
    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    相关资源
    最近更新 更多