正确实现时在parseInt和valueOf中获取错误

时间:2017-10-22 03:20:11

标签: java numberformatexception

我一直试图弄清楚为什么每当我使用某些测试用例时我都会遇到错误(parseInt和valueOf错误)。
9和94187978322都不起作用,我得到错误。
以下是我的所有测试用例(其他一些工作没有): 0, 1, 9, 99, 12, 808, 2133, 321123, 94187978322
这也是SPOJ的称为回文的问题。

import java.util.*;
import java.lang.*;


class PALIN {

    public String palinNum(String s) {

        int len = s.length();
        String center = "";

        if(len % 2 == 1) {

             center = Character.toString(s.charAt(len/2));
        }

        String left = s.substring(0, len/2);
        String right = "";

        for(int j = left.length()-1; j>=0; j--) {

            right += left.charAt(j);

        }

        String palin = "";

        palin = left + center + right;



        if((Integer.valueOf(palin)) > (Integer.valueOf(s))) {

            return palin;
        }
        else {

            if(center.equals("")) {

                 }
            else {

                if((Integer.valueOf(center)) < 9) {

                    center = String.valueOf(((Integer.valueOf(center))) + 1);
                    return left + center + right;
                } else if(left.equals("")) {

                    return "11";
                }
                else {
                    center = "0";
                }
            }
        }


            if((Integer.valueOf(left)) == (left.length()*9)) {

                if(s.length() == 2) {

                    return "101";
                } else if(s.length() == 3){

                    return "1001";
                }
                else {
                String formatted = String.format("%-" + (left.length()) + "s", 1).replace(' ', '0');
                return formatted + "1";
                }
            }
            else {

                String[] leftlist = left.split("");
                int lastIndex = left.length()-1;

                while((Integer.valueOf(leftlist[lastIndex])) == 9) {

                    leftlist[lastIndex] = "0";
                    lastIndex--;
                }

                leftlist[lastIndex] = Integer.toString((Integer.valueOf(leftlist[lastIndex])) +1);
                left = Arrays.toString(leftlist);

                for(int k = left.length()-1; k>=0; k--) {

                    right += left.charAt(k);

                }

                return left + center + right;


            }
            }   



public static void main(String[] args) throws java.lang.Exception {

    Scanner sc = new Scanner(System.in);
    int nCases = Integer.valueOf(sc.nextLine());

    for(int i = 1; i <= nCases; i++) {

        String input = sc.nextLine();
        PALIN obj = new PALIN();
        System.out.println(obj.palinNum(input));



    }


}
}

1 个答案:

答案 0 :(得分:0)

当您输入输入9时,字符串left为空,字符串right为空,字符串palin为&#34; 9&#34;。 在这一行if((Integer.valueOf(left)) == (left.length()*9)) {中,您试图将空字符串解析为将引发异常的整数。 因此,您需要进行适当的检查以确保正确使用代码,例如if(left.length()>0)等。