質問: line.charAt(i); } /* カタカナ文字の重複があるかを確認 */ for(int a=0;a<100;a++) { if(word[key].equals(word[a])) { dup=1; System.out.println("true"); if(key==a) { dup=0; } } } System.out.println(dup); if(dup!=1) { System.out.println(word[key]); } key++; } i++; dup=0; } } ``` ### 試したこと if (x >='ァ' && x <= 'ヶ') の最初にword[key]を表示するように組んだところ,各カタカナ文字の1文字目が表示され,while(x >='ァ' && x <= 'ヶ'||x=='ー')でword[key]を表示したところ,カタカナ文字の二文字目以降が表示されたのでword[key]の値は問題なく入っていると思います. for(int a=0;a<100;a++) でword[a]の値も表示させたが問題なくすべて正常なカタカナ語が表示されました. if(word[key].equals(word[a]))の最後でdupの値を表示させたところ,すべて0となってしまったので,if(key==a) dup=0; が毎回実行されているのだと思われます. ### 補足情報(FW/ツールのバージョンなど) eclipseを使用.文字コードはUTF-8.
回答: いろいろ突っ込みたいところはあるけど、何も出ない状態から結果を表示するだけなら、 ``` key++; if(dup!=1) { System.out.println(word[key]); //重複していない場合のみ文字列を表示 }*/ ``` のインクリメントとif文の順番を入れ替える。あるいは、`word[key - 1]`を表示すればいい。ついでに「`*/`」を取る(なぜここに)。`key`をインクリメントしてから`word[key]`を表示したら、そりゃ何も表示されないだろう。 重複確認は、`word[0]`~`word[key - 1]`までの内容と`word[key]`の内容を比較すればいいので、 ``` /* カタカナ文字の重複があるかを確認 */ for(int a = 0; a < key; a++) { if(word[key].equals(word[a])) { dup = 1; break; } } ``` とすればいい。これなら、keyとaが等しくなることはないので、i文はいらない。また、dupがいったん1になったなら、残りの要素と比較する必要はないのですぐにbreakすればいい。