2017-10-22 6 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が文字列rightがnullで、文字列palinは "9" で、nullです。 そして、この行のif((Integer.valueOf(left)) == (left.length()*9)) {は、null文字列を整数に解析して例外をスローします。 if(left.length()>0)などのコードの正しい動作を保証するために適切なチェックを行う必要があります。

+1

ニースキャッチ。私がそれを実装した後は、なぜ9999が動作しないのか、それ以降の何倍にもかかわらず、私は立ち往生してきました。それはちょうど私が範囲外のエラーを取得するelseステートメントにスキップします。しかし、それはしないでください。 if((Integer.valueOf(left))==(left.length()* 9))は、それをトリガする必要があります – Thasian

関連する問題