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

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

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

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

Q&A

解決済

1回答

2361閲覧

Java インスタンスおみくじについて

nakabou33

総合スコア17

Java

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

0グッド

0クリップ

投稿2017/06/27 01:40

class FortuneTeller{
public static void main(String[] args){
Fortune f = new Fortune( );
f.words= new String[]{"大吉", "中吉", ...};
f.draw( );
} }
class Fortune {
String[] words;
void draw( ){
int r = (int)(Math.random()*words.length);
System.out.println(words[r]);
} }

これらから

Fortune f1 = new Fortune();
f1.words = new String[]{"ラブラブ","新たな出会い","マンネリ","すきま風","破局"};
f1.type = "恋愛運";
f1.draw();
Fortune f2 = new Fortune();
f2.words = new String[]{"旗揚げ","昇進","現状維持","窓際送り","解雇"};
f2.type = "仕事運";
f2.draw();
Fortune f3 = new Fortune();
f3.words = new String[]{"一攫千金","小金持ち","ちりも積もれば...","赤字","自己破産"};
f3.type = "金銭運";
f3.draw();
を加え拡張for文を使って表示するにはどうすればいいですか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

ループで回すには配列やリストにする必要があります。
期待する動きとしては、最初にカテゴリと候補を Fortune という1固まりにしてそれを配列に追加、最後にカテゴリでループさせてそれぞれの候補をランダムで表示という事になります。

なのでこのデータを作成する際になるべく手を掛けないクラスの設計が必要になります。
通常だと

java

1Fortune f; 2List<Fortune> fs = new ArrayList<Fortune>(); 3f = new Fortune(); 4f.type = "xxx"; 5f.words = new String[]{...}; 6fs.add(f);

と、とても冗長な書き方になります。そこでクラスのコンストラクタを変更して簡単に書ける様な細工を入れます。

java

1class Fortune { 2 private String category; 3 private String[] words; 4 5 private Fortune() { 6 } 7 8 public Fortune(String category, String[] words) { 9 this.category = category; 10 this.words = words; 11 } 12 13 public void draw() { 14 int r = (int)(Math.random()*words.length); 15 System.out.println("[" + category + "]" + words[r]); 16 } 17}

こうする事で

java

1public class FortuneTeller{ 2 public static void main(String[] args){ 3 List<Fortune> fs = new ArrayList<Fortune>(); 4 5 fs.add(new Fortune("おみくじ", new String[]{"大吉", "中吉", "小吉"})); 6 fs.add(new Fortune("恋愛運", new String[]{"ラブラブ","新たな出会い","マンネリ","すきま風","破局"})); 7 fs.add(new Fortune("仕事運", new String[]{"旗揚げ","昇進","現状維持","窓際送り","解雇"})) ; 8 fs.add(new Fortune("金銭運", new String[]{"一攫千金","小金持ち","ちりも積もれば...","赤字","自己破産"})); 9 10 for (Fortune f : fs) { 11 f.draw(); 12 } 13 } 14}

データの初期化が簡単に出来るようになり、別のカテゴリや候補を足す際にも手数が増えなくなります。

[おみくじ]中吉 [恋愛運]新たな出会い [仕事運]窓際送り [金銭運]赤字

今日は新たな出会いがあるそうです。

投稿2017/06/27 01:59

編集2017/06/27 01:59
mattn

総合スコア5030

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

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

nakabou33

2017/06/28 02:05

拙い質問文から素晴らしい回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問