java.lang.NumberFormatException如何在我的代码中修复此问题?

时间:2015-07-18 15:18:53

标签: java

我花了几个小时为我的最终编程项目编写代码,经过多次研究和查看我的代码后,我无法找出问题所在。该应用程序模拟了一个银行帐户,其中我有一个名称和一个银行帐号,问题出现在我尝试检查银行帐号是否正确时,它使用银行在我国使用的奇怪算法检查是否有银行帐号是正确的,我自己做了一个检查方法,这里是:

private static boolean esCorrecto(String numero) {

    if(numero.length() != 20){
    return false;
}else{
        String digCtrl = numero.substring(8, 9);
        int digCtrlV = (Integer.parseInt(numero.substring(0,0)) * 4) + (Integer.parseInt(numero.substring(1,1)) * 8) +
                (Integer.parseInt(numero.substring(2,2)) * 5) + (Integer.parseInt(numero.substring(3,3)) * 10) +
                (Integer.parseInt(numero.substring(4,4)) * 9) + (Integer.parseInt(numero.substring(5,5)) * 7) +
                (Integer.parseInt(numero.substring(6,6)) * 3) + (Integer.parseInt(numero.substring(7,7)) * 6);
        digCtrlV = digCtrlV%11;
        digCtrlV = 11 - digCtrlV;
        if(digCtrlV == 10){
            digCtrlV = 1;
        }
        int digCtrlV1 = (Integer.parseInt(numero.substring(10,10)) * 4) + (Integer.parseInt(numero.substring(11,11)) * 4) +
                (Integer.parseInt(numero.substring(12,12)) * 4) + (Integer.parseInt(numero.substring(13,13)) * 8) +
                (Integer.parseInt(numero.substring(14,14)) * 5) + (Integer.parseInt(numero.substring(15,15)) * 10) +
                (Integer.parseInt(numero.substring(16,16)) * 9) + (Integer.parseInt(numero.substring(17,17)) * 7) +
                (Integer.parseInt(numero.substring(18,18)) * 3) + (Integer.parseInt(numero.substring(19,19)) * 6);
        digCtrlV1 = digCtrlV1%11;
        digCtrlV1 = 11 - digCtrlV1;
        if(digCtrlV1 == 10){
            digCtrlV1 = 1;
        }
        String digCtrlVerdaderos = Integer.toString(digCtrlV) + Integer.toString(digCtrlV1);
        if(digCtrl.equals(digCtrlVerdaderos)){
            return true;
        }else
            return false;
    }

首先检查数字的长度是否正确(20位),然后通过执行某些操作检查控制编号(数字9和10)是否正确。主方法有几行,但我在以下部分得到错误:

 public static void main(String[] args) throws Ex {
       int control = -1;
       Scanner teclado = new Scanner(System.in);
       System.out.println("Introduce nombre del titular y un numero de cuenta (pulsar enter despues de cada introduccion) ");
       CuentaBancaria cta = new CuentaBancaria(teclado.next(), teclado.next(), 0);
       if(esCorrecto(cta.getNumeroCuenta())){

最后我得到的错误就是这个:

  

线程“main”中的异常java.lang.NumberFormatException:用于输入   string:“”at   java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)     在java.lang.Integer.parseInt(Integer.java:592)at   java.lang.Integer.parseInt(Integer.java:615)at   proyectofinal.ProyectoFinal.esCorrecto(ProyectoFinal.java:82)at   proyectofinal.ProyectoFinal.main(ProyectoFinal.java:21)Java结果:1

2 个答案:

答案 0 :(得分:3)

numero.substring(n, n)是一个零长度的字符串。要提取您想要的单字符字符串numero.substring(n, n+1)。请参阅String.substring doc

您也可以使用Character.digit而不是制作子字符串;虽然对于无效输入返回-1而不是抛出异常,但为了捕获错误(以及整洁性),最好将其包装到方法中:

private static int digit(String s, int pos) {
    int digit = Character.digit(s.charAt(pos), 10);
    if (digit == -1) throw new NumberFormatException(s);
    return digit;
}

答案 1 :(得分:0)

你继续使用具有相同开始和结束的子字符串,以及子字符串提取和空字符串""。使用substring(i, i+1)获取位置i上的数字。

substring documentation