2017-10-22 55 views
-3

我一直在试图弄清为什么每当我使用某些测试用例时,我总是收到错误(parseInt和valueOf错误)。
9和94187978322都不起作用,并且出现错误。
这里是我的所有测试用例(有些工作别人不一样): 0, 1, 9, 99, 12, 808, 2133, 321123,
这也从SPOJ的经典问题叫回文。正确实施parseInt和valueOf时发生错误

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)); 



    } 


} 
} 
+0

如果您在Java上发布问题,请使用* java *标记。 –

+0

假设用户输入输入字符串“ab”,那么在第28行中,代码试图将字符串字符串解析为不可能的整数if((Integer.valueOf(palin))>(Integer.valueOf S)))'。因此,请检查您的代码的逻辑,以便它也可以用于字母数字字符串。 – Karan

回答

0

当你进入输入9,字符串left为null,该字符串right为null和字符串palin是 “9”。 并在这一行if((Integer.valueOf(left)) == (left.length()*9)) {您正在尝试将一个空字符串解析为一个会抛出异常的整数。 因此,您需要进行适当的检查以确保您的代码正常工作,如if(left.length()>0)等。

+1

好的。在我实现这个之后,我一直在坚持为什么9999不起作用或之后有任何多重。它只是跳到else语句,我得到一个越界错误。它不应该。语句if((Integer.valueOf(left))==(left.length()* 9))应该触发它 – Thasian