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

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

ただいまの
回答率

91.34%

  • Java

    10507questions

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

Javaで人数を編集したい

解決済

回答 1

投稿 2017/05/20 01:25

  • 評価
  • クリップ 0
  • VIEW 198

k499778

score 462

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

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

仕様は以下です。

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

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

public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        System.out.println(t.getNumberOfPeople(false, 1, 10)); //
        System.out.println(t.getNumberOfPeople(true, 1, null)); // 1人~
        System.out.println(t.getNumberOfPeople(true, null, 10)); // ~10人
        System.out.println(t.getNumberOfPeople(true, 1, 10)); // 1人~10人

    }

    public String getNumberOfPeople(boolean check, Integer from, Integer to) {
        StringBuilder sb = new StringBuilder("");
        if (check == false)
            return sb.toString();
        if (check == true) {
            if (from != null) {
                sb.append(from.toString());
                sb.append("人");
            }
            if (from != null || to != null) {
                sb.append("~");
            }
            if (to != null) {
                sb.append(to.toString());
                sb.append("人");
            }
        }
        return sb.toString();
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

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


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

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

public String getNumberOfPeople(boolean check, Integer from, Integer to) {
    if (!check) return "";
    if (from == null && to == null) throw new IllegalArgumentException();
    StringBuilder builder = new StringBuilder();
    if (from != null) builder.append(from).appemd("人");
    builder.append("~");
    if (to != null) builder.append(to).append("人");
    return builder.toString();
}

投稿 2017/05/20 01:42

編集 2017/05/20 09:56

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/20 02:05

    回答ありがとうございます。
    シンプルでコード量も少なく非常に参考になるコードでした。

    ちなみに「 throw new IllegalArgumentException();」をしている意図や理由はなんでしょうか?

    キャンセル

  • 2017/05/20 02:32

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

    キャンセル

  • 2017/05/20 08:10

    返答ありがとうございます。
    なるほど!

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

    キャンセル

  • 2017/05/20 08:14

    連投申し訳ないです。

    御回答頂いていたソースを修正されましたが、
    if (from != null) builder.insert(0, from).append("人");

    if (from != null) builder.insert(0, "人").insert(0, from);

    に変わったのはなぜでしょうか?
    元のコードでも正しく実行されるように思いましたが。

    キャンセル

  • 2017/05/20 09:00

    Web APIのほうは明るくないため答えられません。すみません。

    コード変更の理由:
    append("人")の場合、最初にbuilderに入れた"~"のあとに"人"が入ってしまい、"3~人"のようになってしまうからです。

    キャンセル

  • 2017/05/20 10:02

    回答ありがとうございます。

    返答いただけただけでありがたいです。

    あ、ほんとですね。勘違いしてました。

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

    キャンセル

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

ただいまの回答率

91.34%

関連した質問

  • 受付中

    明解Java入門編演習9−3

    この演習はDayクラスを使わずに行う演習なのでしょうか? Dayクラスを使うのなら、銀行口座クラスにtoStringメソッドを作る理由が分かりません。 また、もしDayクラスを

  • 受付中

    ループ化の方法

    public class Gohkaku {     public static void main(String[] args){         int math = ne

  • 解決済

    getMethod、invokeの第2引数について

    こんなクラスがあったとします。 class Test { private Double A; private Integer B; private

  • 解決済

    toString()メソッドのうまい書き方がわかりません。

    簡単な単方向連結リストの実装をしてみたのですが、toStringメソッドがうまく書けないで、困っています。 どのように記述するのがベストだと思われますか? public c

  • 解決済

    swing イベントの値をsqlの検索条件に設定

    前提・実現したいこと いつもお世話になっております。 swingでチェックボックスやテキストボックスに値を設定して その値をSQLの検索条件にしたいです。 例)チェック

  • 解決済

    java swing sql文追加に関して

    前提・実現したいこと javaのswingを使用し、アプリケーションを作成しています。 パネル上に設置しているチェックボックスがすべてオフならば SQLの検索条件から除外する

  • 解決済

    Javaでマス当てゲームを作りたい

    前提・実現したいこと Javaで5*5のマス目から当たりを見つけるプログラムを作りたいと考えています。 インターネットで下記のプログラムを見つけ応用できないかと思っています。

  • 受付中

    java 進数

    javaです 「数」を表すNumberクラスを考える。Numberクラスを基底クラスとして定義し、整数に対し2進数、8進数、10進数、16進数の文字列を返すメソッドをもつ派生

同じタグがついた質問を見る

  • Java

    10507questions

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