2016-10-14 12 views
-2

最初の行には、N人の人物の数とL、それぞれPalindromeの人の名前の最大長を表すNとL Nの2つの整数が含まれています。 次のN行のi番目の行には、i番目の人物の名前を示す単一の文字列Sが含まれています。 これは、重複しない名前のサブストリングを最大で2つ選択し、それらを逆にすることで実現できます。Javaの文字列の文字列

私のコードは正しくコンパイルされていますが、ランタイムエラーが発生しています:何を変更する必要がありますか?私は回文フォームに自分の名前を変更することができた人の数を印刷する必要がある

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.Arrays; 

class Palindrome { 

    public static void main(String args[]) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     { 
      String line = br.readLine(); 
      int N = Integer.parseInt(line); 
      int l = Integer.parseInt(line); 
      String a[] = new String[N]; 
      int c = 0; 

      for (int i = 0; i < N; i++) { 
       System.out.println("Enter names"); 
       a[i] = br.readLine(); 
      } 
      String reverse[] = new String[N]; 

      int arrayLength = a.length; 

      for (int i = arrayLength - 1; i >= 0; i--) { 
       reverse[i] = reverse[i] + a[i].charAt(i); 
      } 
      if (Arrays.equals(a, reverse)) //if (a[i].equals(reverse[i])) 
      { 
       c++; 

       System.out.println(c); 

      } 
     } 
    } 
} 

: はここに私のコードです。

例:

Input:   
    4 10    
    aacbaac 
    acbdabc 
    abcdcba 
    abcbd 

output: 
    3 

ここで4人 10の総数は出力3としてのみ最初の3人である

各人物の名前の最大長さを意味意味名前をそれぞれの形式に変更することができます。

+1

取得しているエラーは何ですか? – BlackHatSamurai

+0

あなたの入力は何ですか? – progyammer

答えて

0

文字列配列を定義したが、文字列を渡そうとしているという問題が1つあります。あなたは、私はこれがCodechefの問題であると推定このreverse[i] = reverse[i] + a[i].charAt(i);がちょうどreverse[i] = a[i].charAt(i);

+0

'reverse [i] = a [i] .charAt(i);は' reverse [i] = String.valueOf(a [i] .charAt(i)); 'elseエラーでなければなりません。 –

0

する必要があり、またChar reverse[] =new Char[N];

String reverse[] =new String[N]; を行う必要があります。コードの主な問題は、値をNlに割り当てる部分です。 lineで入力を1回だけ受け取り、Nlの両方に整数値を割り当ててください。だから、問題は、あなたのプログラムが期待どおりの入力を受けていないということです。:入力をlineで2回にする必要があります。ネストされたループ構造で行う必要があり、文字列の逆を見つけながらループの中でやろうとしているもの以外にも

String line = br.readLine(); 
int N = Integer.parseInt(line); 
line = br.readLine(); //add this line before assigning l's value 
int l= Integer.parseInt(line); 

にその部分を変更します。その複雑さを放棄するには、2番目のreverse配列を忘れてください。あなたは回文文字列をチェックするために、この1行のステートメントを使用することができます。

for(int i=0; i<a.length; i++){ 
    if(String.valueOf(new StringBuffer(a[i]).reverse()).equalsIgnoreCase(a[i])) 
     //a[i] is a palindrome, do whatever you want to 
} 
0

はそれを逆にするStringBuilder INORDERにそれを渡します。私はあなたがのためにint変数lを使用しているか知っているが、私はNで上記の行っているようにそれを変更しない

public static void main(String args[]) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String line = br.readLine(); 
     int N = Integer.parseInt(line); 
     int l = Integer.parseInt(line); 
     String a[] = new String[N]; 
     int c = 0; 

     for (int i = 0; i < N; i++) { 
      System.out.println("Enter names"); 
      a[i] = br.readLine(); 
     } 
     String reverse[] = new String[N]; 

     int arrayLength = a.length; 

     for (int i = arrayLength - 1; i >= 0; i--) { 

      StringBuilder build = new StringBuilder(a[i]); 

      reverse[i] = build.reverse().toString(); 
      if (a[i].equals(reverse[i])) { 
       c++; 
      } 

     } 
     System.out.println("Pal is " + c); 

    } 

:以下のコードを確認します。

関連する問題