質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

965閲覧

末尾の1文字が y で、末尾から2文字目が a, i, u, e, o のいずれかの場合、文字列の末尾にsをつけたい

NIKONIKONIKONIK

総合スコア83

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/02/28 03:17

末尾の1文字が y で、末尾から2文字目が a, i, u, e, o のいずれかの場合にsがつかない

-入力値-
2
study
play

期待する出力値
studies
plays

出力結果
studies
plaies

意見
ロジック的には間違っていないと思うのですが、不備があるかもしれません。30分見ても問題解消に至りませんでした。

java

1import java.util.*; 2 3 4public class Main { 5 public static void main(String[] args) { 6 Scanner sc = new Scanner(System.in); 7 8 int N = sc.nextInt(); //英語単語数 9 if(N >= 1 && N<=10){ //入力範囲 10 11 sc.nextLine(); 12 13 for(int i=0; i<N; i++){ //指定した英単語数分ループ 14 15 String word =sc.nextLine(); //複数形にする英単語 16 System.out.println(Grammarcheck(word)); //文法チェック後の出力 17 18 } 19 } 20 } 21 22 public static String Grammarcheck(String word){ //文法チェックと変換する関数 23 if(word.endsWith("s") || word.endsWith("sh") || word.endsWith("ch") || word.endsWith("o") || word.endsWith("x")){ //末尾が s, sh, ch, o, x のいずれかの場合 24 25 return word + "es"; //英単語の末尾にesを追記 26 27 } 28 if(word.endsWith("f")){ //末尾がfの場合 29 30 return word.replace("f", "ves"); //英単語の末尾のfを除き、末尾に ves を付ける 31 32 } 33 if(word.endsWith("fe")){ //末尾がfeの場合 34 35 return word.replace("fe", "ves"); //英単語の末尾のfeを除き、末尾に ves を付ける 36 37 } 38 if(word.endsWith("y")){//末尾の1文字が yの場合 39 40 char charEnd2 = word.charAt(word.length() - 2); //末尾から2文字目取得 41 String end2 = String.valueOf(charEnd2); //String型へ変換 42 43 if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o"){ //末尾から2文字目が a, i, u, e, o のいずれでもない場合 44 45 return word.replace("y","ies"); //英単語の末尾の y を除き、末尾に ies を付ける 46 47 } 48 } 49 //上のいずれの条件にも当てはまらない場合 50 return word + "s"; //英単語の末尾には s を付ける 51 } 52 53} 54 55

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o"){ //末尾から2文字目が a, i, u, e, o のいずれでもない場合

↑の中に入ってしまうということは、比較がうまくできていないのかもしれません。
もし end2 の値が a なのであれば(printして確認してください)
可能性としては、ifのアルファベットがchar型と認識されているかもしれません。
String型の変数に入れておいたり、equals関数で比較してあげると安心です

char型とString型は比較方法が違います

投稿2020/02/28 04:04

oec

総合スコア271

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1 if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o"){ 2 //末尾から2文字目が a, i, u, e, o のいずれでもない場合 3 return word.replace("y","ies"); //英単語の末尾の y を除き、末尾に ies を付ける 4 }

ここのif文内で ||(OR) と書いてあるのが原因です。
playを例にすると
末尾から2文字目は「a」なのでyをiesにreplaceする必要はないですが

java

1if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o"){

この条件の場合
end2 != "a"はfalseとなりますが。||で書かれている為、それ以外がtrueとなるのでif文の中にはいってしまいます。

こちらの分岐をswitch文を使って直してあげると想定通りの結果となるのではないでしょうか。

投稿2020/02/28 03:55

June666

総合スコア290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問が書いてないので聞きたいことがわかりませんが、

Java

1if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o"){ //末尾から2文字目が a, i, u, e, o のいずれでもない場合

ここは常にtrueになると思います

投稿2020/02/28 03:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1if(end2 != "a" || end2 != "i" || end2 != "u" || end2 != "e" || end2 != "o")

ではなく、

java

1if(end2 != "a" && end2 != "i" && end2 != "u" && end2 != "e" && end2 != "o")

では。

投稿2020/02/28 03:41

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

まずJavaでのString文字列の判定の仕方が間違ってます。==ではなくequalsメソッドを使ってください。
そして複数の否定条件を繋ぐ(いずれでもない)時はOR条件(||)ではなくAND条件(&&)を使います。

java

1・・・ 2if(word.endsWith("y")){//末尾の1文字が yの場合 3 4 char charEnd2 = word.charAt(word.length() - 2); //末尾から2文字目取得 5 String end2 = String.valueOf(charEnd2); //String型へ変換 6 7 if(!end2.equals("a") && !end2.equals("i") && !end2.equals("u") && !end2.equals("e") && !end2.equals("o")){ //末尾から2文字目が a, i, u, e, o のいずれでもない場合 8 9 return word.replace("y","ies"); //英単語の末尾の y を除き、末尾に ies を付ける 10 11 } 12} 13・・・

投稿2020/02/28 03:41

yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問