blue-phoenix
@blue-phoenix

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

コードの簡略化について

Q&A

Closed

あるand文について教えてほしい事があります。
以下のコードをシンプルに表記する方法があれば教えていただきたいのですが。
「文字列 S が与えられるので、 S を整数に変換できる場合には "YES" ,
そうでない場合は "NO" を出力。
 文字列 S を数値に変換できるとは、S の全ての文字が{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
のいずれかであること」

String[] input = sc.nextLine().split("");
String output = "YES";
for (int i = 0; i < input.length; i++) {
if(!input[i].equals("0") && !input[i].equals("1") && !input[i].equals("2") && !input[i].equals("3") && !input[i].equals("4") && !input[i].equals("5") && !input[i].equals("6") && !input[i].equals("7") && !input[i].equals("8") && !input[i].equals("9")){
output = "NO";
}}
System.out.println(output);
}}
例 100ならYES、DogならNO、phoenix13はNO

という手打ちで1つずつ書いて0~9までやってみました。
一応上記でも正解となりましたが、あまりにもベタでいつか似た問題でミスするかもしれません。
さすがに簡略化については想像すらできず、ヒントもまったくつかめそうにないので
こういったコードをもっとシンプルに表すbetterな方法があれば御教授お願いしたいです。

0

1Answer

いろいろ方法はあると思いますが、いくつか挙げておきます。

  1. 各桁で"0"以上"9"以下かを判断する("1","2",..."9"を全部見る必要がない)。

  2. Integer.parseInt() を使って文字列を int に変換する。intに変換できない文字の場合は例外が発生するので、try-catchして判断する

  3. string.matches("[0-9]+") を使って数字のみかを判断する。

最後の正規表現を使うのが一番シンプルかな?

String input = sc.nextLine();
String output = input.matches("[0-9]+") ? "YES" : "NO";
System.out.println(output);
3Like

Comments

  1. @blue-phoenix

    Questioner

    うおおおおおおおおおおおおおおおおおおおお、できました!!!???
    こ、こ、こんな1行でこなせられるなんて・・・。
    しかも判定も速くてランタイムエラーも起こる気配なしw
    さすがですね! nak先生、いつもありがとうございました!
    フォローに・・・もうありますね。
  2. 主旨が違ったかなと考えて、1行で書いたコードは消しました。
  3. @blue-phoenix

    Questioner

    どちらもありがたく参考にしておきます!
    そういえば最近、sc.next()をまるごとprintlnの中に入れてあるコードを
    見かけます。なんというか、宣言文をもまるごと出力に突っ込むというか。
    まだ全然飲めていませんが、簡略化って( )に凝縮できるかどうかなんですね。
  4. @blue-phoenix

    Questioner

    やはり今後の世界に求められし道標は簡略。
    無駄を省きし凝縮された国家こそ日本を救う。
    もう勢いだけではやっていけないのか・・・。

Your answer might help someone💌