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

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

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

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

Q&A

解決済

1回答

1613閲覧

Javaで人数を編集したい

k499778

総合スコア599

Java

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

0グッド

0クリップ

投稿2017/05/19 16:25

現在Javaで開発をしています。

ある項目の人数の編集をしたいのですがどのようなコードを書けばいいか困っています。

仕様は以下です。

1. checkがtrueの場合
a.人数下限のみの場合、「1人〜」
b.人数下限と上限がある場合「1人〜10人」
c.人数上限のみの場合「〜10人」
2. checkがfalseの場合、空文字

以下のようなコードを書きました。
もっといい書き方があれば教えてください。お願い致します。

java

1public class Test { 2 public static void main(String[] args) { 3 Test t = new Test(); 4 System.out.println(t.getNumberOfPeople(false, 1, 10)); // 5 System.out.println(t.getNumberOfPeople(true, 1, null)); // 1人~ 6 System.out.println(t.getNumberOfPeople(true, null, 10)); // ~10人 7 System.out.println(t.getNumberOfPeople(true, 1, 10)); // 1人~10人 8 9 } 10 11 public String getNumberOfPeople(boolean check, Integer from, Integer to) { 12 StringBuilder sb = new StringBuilder(""); 13 if (check == false) 14 return sb.toString(); 15 if (check == true) { 16 if (from != null) { 17 sb.append(from.toString()); 18 sb.append("人"); 19 } 20 if (from != null || to != null) { 21 sb.append("~"); 22 } 23 if (to != null) { 24 sb.append(to.toString()); 25 sb.append("人"); 26 } 27 } 28 return sb.toString(); 29 } 30} 31

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

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

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

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

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

guest

回答1

0

ベストアンサー

java

1public String getNumberOfPeople(boolean check, Integer from, Integer to) { 2 if (!check) return ""; 3 if (from == null && to == null) throw new IllegalArgumentException(); 4 StringBuilder builder = new StringBuilder("~"); 5 if (from != null) builder.insert(0, "人").insert(0, from); 6 if (to != null) builder.append(to).append("人"); 7 return builder.toString(); 8}

最初に"~"を確定させておき、fromがあれば先頭に足す形にしてみた
後、StringBuilderのコンストラクタに空文字を渡すのは無駄です。

追記
せっかく両方nullの可能性を最初に排除したのにそれを生かすのを忘れてた

java

1public String getNumberOfPeople(boolean check, Integer from, Integer to) { 2 if (!check) return ""; 3 if (from == null && to == null) throw new IllegalArgumentException(); 4 StringBuilder builder = new StringBuilder(); 5 if (from != null) builder.append(from).appemd("人"); 6 builder.append("~"); 7 if (to != null) builder.append(to).append("人"); 8 return builder.toString(); 9}

投稿2017/05/19 16:42

編集2017/05/20 00:56
swordone

総合スコア20651

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

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

k499778

2017/05/19 17:05

回答ありがとうございます。 シンプルでコード量も少なく非常に参考になるコードでした。 ちなみに「 throw new IllegalArgumentException();」をしている意図や理由はなんでしょうか?
swordone

2017/05/19 17:32

コードの目的からして、fromとtoの両方がnullという状況はおかしいので、例外を発してそれを伝達する目的で入れました。
k499778

2017/05/19 23:10

返答ありがとうございます。 なるほど! このデータが例えばweb APIで取得しており、値がないときは項目自体が配列から消えているとします。 そのときはNULLの可能性があるのかな。それを踏まえてIntegerにしておく必要があるのかなと思ったのですが、その考え方に関してはどうでしょうか? 詳細設計部分の作りについて詳しくなりたかったので質問させていただきました。お忙しかったら申し訳ないです。
k499778

2017/05/19 23:14

連投申し訳ないです。 御回答頂いていたソースを修正されましたが、 if (from != null) builder.insert(0, from).append("人"); ↓ if (from != null) builder.insert(0, "人").insert(0, from); に変わったのはなぜでしょうか? 元のコードでも正しく実行されるように思いましたが。
swordone

2017/05/20 00:00

Web APIのほうは明るくないため答えられません。すみません。 コード変更の理由: append("人")の場合、最初にbuilderに入れた"~"のあとに"人"が入ってしまい、"3~人"のようになってしまうからです。
k499778

2017/05/20 01:02

回答ありがとうございます。 返答いただけただけでありがたいです。 あ、ほんとですね。勘違いしてました。 追記頂きありがとうございます。 fromもtoも同じロジックになっているのでこちらの方がわかりやすいですかね。お付き合い頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問