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

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

ただいまの
回答率

90.43%

  • Java

    14772questions

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

条件分岐 簡潔に書きたい

受付中

回答 4

投稿

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

cuku

score 48

ファイル➀とファイル➁というボタンがありファイル➀を押した時にはファイル➀が出力されファイル➁を押下した時にはファイル➁が出力される処理があります。
ユーザーごとに出力するファイルのパスが違います。
この条件の分岐方法を簡潔に書きたいのですがいい書き方が思いつきません。
今後ユーザーが追加される可能性があるのでswitch caseを使って書こうと思ったのですが
ファイル➀とファイル➁で分けてからユーザーごとに分けるとするとコードがかなり見にくくなってしまいました。言語はJavaを使っています。
複雑な条件分岐でも簡潔に書ける方法がありましたら教えてもらいたいです
・ユーザーごとに出力するフィルを分ける
・出力するファイルは二種類
・今後ユーザーが増える可能性がある。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • cateye

    2019/01/11 18:08

    mapから引っ張ってくるときに、1番目か2番目かの判断をすればいいだけです。

    キャンセル

  • cuku

    2019/01/11 18:20

    あーなるほど。
    ありがとうございます。やってみます。
    一番か二番かってどうやってはんだんすればいいのですか?

    キャンセル

  • cateye

    2019/01/11 18:34 編集

    それはパスのもたせ方次第ですが、通常1番のボタンが押されたら1番目ということでしょうね。

    キャンセル

回答 4

0

ファイルが2種類固定、ユーザーがクラスになっているのならboolean値を持つでしょうか。

User user = new User();

if( user.onefile ) // ファイル1の処理
else // ファイル2の処理
class User
{
  boolean onefile = false;
}

修正依頼でcateyeさんが言っていたmapとは、
ユーザー1   ファイル1
ユーザー2   ふぁいる1
ユーザー3   ファイル2
みたいに、ユーザー名とファイル1か2かをリンクするやり方です。
ちなみに私はmapは触ってないので処理は省略で。

また、一番上の方法はファイルが3つ以上あると対応できないので、その場合はintを渡すなど変更します。

あとは、条件分岐ではありませんがユーザーがクラスで(StringやIntegerも含む)配列なら
forを使うのもありでしょう。ただし、ユーザー名が多いとorがたくさんになったりするので、
めんどくさいです。結局ユーザーのクラスを持つことになるでしょう。

User[] users = { new User(), new User(), new User() }; // 手抜き

for( int l = 0; l < users.length; l++ ){
  if( users.onefile ) // ファイル1
  else // ファイル2
}

String[] usernames = { "ゆーざー", "ゆざ", "ゆうざあ" };

for( int l = 0; l < usernames.length; l++ ){
  if( usernames[ l ].equals( "ゆーざー" ) || usernames.equals( "ゆうざあ" ) )
    // ファイル1
  else
    // ファイル2
}

最後に ファイル処理をやっているということですが、結構この処理は似たような動作が多いです。
やっていないのなら、関数化をおすすめします。これだけで、かなりソースが短く見やすくなるかと。
長文失礼しました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

一応w 回答としては、MAPを使ってIDで検索d^^
IDにマッチしたMAPから、ボタンに対応したパスをもってくる。

ユーザの情報(ID,パス1、パス2)は、ファイルから読み込むようにすれば、MAPに収容するユーザは可変にできます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/11 18:44

    c++ なら、処理も書けるんですがw・・・ javaはいまいちなんで^^:ご容赦くださいm(_"_)m

    キャンセル

0

ユーザとパスの管理方法わからんですが・・・コメントにあったやりかた。
switch case使うなら2次元配列でも十分な気がしますが。

Map<String, String[]> userMap = new HashMap<String, String[]>();
{
//    userMap.put(user, new String[] {"path1", "path2"});
    userMap.put("A",  new String[] {"A1", "A2"});
    userMap.put("B",  new String[] {"B1", "B2"});
    userMap.put("C",  new String[] {"C1", "C2"});
}

int fileButton = 0;

System.out.println(userMap.get("A")[fileButton]);
System.out.println(userMap.get("B")[fileButton]);
System.out.println(userMap.get("C")[fileButton]);

// if fileButton2.pressed() fileButton = 1;
fileButton = 1;

System.out.println(userMap.get("A")[fileButton]);
System.out.println(userMap.get("B")[fileButton]);
System.out.println(userMap.get("C")[fileButton]);

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

ファイルを作る処理と出力する処理を分けると簡潔にできます。

以下は、イメージです。

main(){
  File downLoadFile;

  //ファイル作成処理
  if(isClickButton1 == true)
  {
    downLoadFile = createFile1();
  }
  else
  {
    downLoadFile = createFile2();
  }

  // 1行で書きたければこちら(上とやっていることは同じ)
  File downLoadFile = (isClickButton == true) ?  createFile1() : createFile2();

  // ファイル出力
  outputFile(usercode,downLoadFile);

}

File createFile1()
{
 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

File createFile2()
{
 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}


void outputFile(string usercode)
{
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
}

ファイルの出力先がユーザーごとに違う件の解決策は、2種類あります。
①出力先のルールをきっちり決める
例えば、ユーザーごとにフォルダを分ける
\\server\output\usercode
機能ごとに分けるとか
\\server\output\button1\usercode
\\server\output\button2\usercode
\\server\output\usercode\button1
\\server\output\usercode\button2

②DBに出力先を持たせる
自由に出力先を変えたい。という要望があればです。
テーブルの定義は下記になると思います。
すでにアカウントマスタを持っていれば、列を追加してください。
usercode、outputPath
 

少なくとも、Case文で。。。というのは止めておきましょう。。。
ユーザーが追加になった時にすぐに対応できないです。
時間がかかると説明しても、ユーザーは納得しないです。
なぜ、出力先を追加するだけで時間がかかるんだ。となります。

追記:
DBに出力先の列を追加するときは、編集、登録画面もセットで開発することを勧めます。
システム管理者でDBに直接更新をかけることはミスの元です。
作業負荷も増すので。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.43%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Java

    14772questions

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