2012-01-25 20 views
0

私は最後の2文字と1語の最初の2文字を読み、一致するかどうかを調べるコードを探しています。単語は常に大文字で表示されます。これは私がこれまでに持っているコードであり、なぜこれはうまくいかないのだろうかと非常にうんざりです!私はN00B :)Javaプログラムが接頭辞と接尾辞を読み取る

public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    Scanner scan = new Scanner(System.in); 

    String s; 
    char[] a; 

    int input=scan.nextInt(); 
    scan.nextLine(); 
     for(int i=0; i<input; i++){ 
      a = scan.nextLine().toCharArray(); 


     if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){ 
       System.out.println("MATCH"); 
      }else{ 
       System.out.println("DO NOT MATCH"); 
      } 

     } 

} 

}

最初の事はあなたがほとんどそこにいる...

+0

なぜあなたは 'char'配列に変換していますか? 'String'クラスは理由のために' substring() 'メソッドを持っています。 –

+1

この宿題はありますか?タグを付けてください。 –

+0

本当に宿題ですが、はい。 – user1064249

答えて

1

を不思議に思った場合、それが実行される回数のためのFOR文であるために申し訳ありません - あなたが不足しているビットは、そう、アレイ内の最後要素があり、そのアレイのが、ゼロからインデックスされている[1-a.length]と最後から二番目の一つは、[a.length-2]である

2

これを交換してみてください:

これで
if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){ 

if((a[0] == a[a.length - 2]) && (a[1] == a[a.length - 1])){ 

配列は、Javaで0ベースなので、最後の要素は、実際に.length - 1です。 (長さ3の配列は、[0, 1, 2]の有効な指標になります - ない[1, 2, 3]を。)


編集:ブライアンはので、事前に引き上げたため しかし、私は変換必要としない、より良い提案します文字配列に文字列を変換するか、部分文字列を使用して新しい文字列を作成する必要があります。

String str = scan.nextLine(); 
if((str.charAt(0) == str.charAt(str.length() - 2)) && (str.charAt(1) == str.charAt(str.length() - 1))){ 

あなたの文字列が2つの未満の文字である場合にも、何が起こりますか? (あなたはこれをチェックしたいかもしれません...)

+0

"長さ<2"の問題を指摘するために+1 – dty

1

charアレイに変換することは、実際はちょっとばかげています。

String line = scan.nextLine(); 

if (line.substring(0,2).equals(line.substring(line.length() - 2))) 
{ 
    // it matched ... 
} 

編集:あなたは、私が上記substring()の両方の形式を使用していることに注意しましょう。最初のインデックスは開始インデックスと終了インデックスを取り、2番目のインデックスは開始インデックスのみを取り、ソースの末尾に達しますString。 2つの引数バージョンの2番目の引数は、の後にインデックスであり、必要な部分文字列であることに注意してください。

+0

+1私は完全に同意します。このような場合、 'substring()'メソッドが最適です。 – fireshadow52

+0

私はこれを昨日見て、この方法をどうやって行うのかと思っていました。これはちょうど私が今日後でそれを試してみる素晴らしい見えます! :) – user1064249

+0

Java IMHOの 'substring()'との奇妙なことは、第2引数があなたが望む部分文字列*の後ろにあることを覚えておかなければならないことです。例えば最初の2文字を取得するには、開始インデックスとして「0」を、終了インデックスとして「2」を指定します。それについて考えると、私はちょうど2つのバージョンがあることを思い出しました。私は私の答えを編集します。 –

関連する問題