2017-10-22 57 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