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

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

ただいまの
回答率

90.76%

  • JavaScript

    15309questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    13158questions

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

プログラムに近い課題です

受付中

回答 3

投稿

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

satou918523

score 2

こんばんは。初質問失礼します。
a.b.cの箱1つに車が一台入ってて、aに絶対車が入ってるのが条件で、最初にどこに入ってるか当てる人が最初の自分の意見を変えない時と変えた時の的中率を1万回から10万回やってどっちに寄るかって課題です。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • asahina1979

    2018/04/19 19:40

    まあ真面目な答えではないし(※ 1/3が2/6なるきがするのはおいておいて)

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/04/19 19:53

    プログラムに「近い」問題であって、プログラムの問題じゃないんでしょ? 機械じゃないんだから、1万回どころか100回やる前に当てる人飽きて投げ出しますって。ガキの使いの田中の100のコトって見た事無いんですか?

    キャンセル

  • 退会済みユーザー

    2018/04/19 22:11

    複数のユーザーから「問題・課題が含まれていない質問」という意見がありました
    teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。
    「編集」ボタンから編集を行い、質問の意図や解決したい課題を明確に記述していただくと回答が得られやすくなります。

回答 3

+5

# frozen_string_literal: true

boxes = {
  a: true,
  b: false,
  c: false,
}

count = 100_000 # 10万回

sonomama_rate = count.times.count do
  select_box = boxes.keys.sample
  boxes[select_box]
end.to_f / count

naosu_rate = count.times.count do
  select_box = boxes.keys.sample
  next_select_box = (boxes.keys - [select_box]).sample
  boxes[next_select_box]
end.to_f / count

monty_rate = count.times.count do
  select_box = boxes.keys.sample
  open_box = (boxes.keys - [select_box])
    .reject(&boxes.method(:[])).sample
  next_select_box = (boxes.keys - [open_box]).sample
  boxes[next_select_box]
end.to_f / count

monty_hall_rate = count.times.count do
  select_box = boxes.keys.sample
  open_box = (boxes.keys - [select_box])
    .reject(&boxes.method(:[])).sample
  next_select_box = (boxes.keys - [select_box, open_box]).first
  boxes[next_select_box]
end.to_f / count

printf("%.1f%%\n", sonomama_rate * 100)
printf("%.1f%%\n", naosu_rate * 100)
printf("%.1f%%\n", monty_rate * 100)
printf("%.1f%%\n", monty_hall_rate * 100)
boxes =
  a: true
  b: false
  c: false

count = 100000 # 10万回

sample = (arr) ->
  arr[Math.floor(Math.random() * arr.length)]

sonomamaRate = [1..count].filter ->
  selectBox = sample(Object.keys(boxes))
  boxes[selectBox]
.length / count

naosuRate = [1..count].filter ->
  selectBox = sample(Object.keys(boxes))
  next_selectBox = sample(Object.keys(boxes)
    .filter((box) -> box != selectBox))
  boxes[next_selectBox]
.length / count

montyRate = [1..count].filter ->
  selectBox = sample(Object.keys(boxes))
  openBox = sample(Object.keys(boxes)
    .filter((box) -> box != selectBox)
    .filter((box) -> !boxes[box]))
  next_selectBox = sample(Object.keys(boxes)
    .filter((box) -> box != openBox))
  boxes[next_selectBox]
.length / count

montyHallRate = [1..count].filter ->
  selectBox = sample(Object.keys(boxes))
  openBox = sample(Object.keys(boxes)
    .filter((box) -> box != selectBox)
    .filter((box) -> !boxes[box]))
  next_selectBox = Object.keys(boxes)
    .filter((box) -> box != selectBox && box != openBox)
  boxes[next_selectBox]
.length / count


console.log "#{(sonomamaRate * 100).toFixed(1)}%"
console.log "#{(naosuRate * 100).toFixed(1)}%"
console.log "#{(montyRate * 100).toFixed(1)}%"
console.log "#{(montyHallRate * 100).toFixed(1)}%"
import kotlin.ranges.IntRange

fun main(args: Array<String>) {
    val boxes = mapOf(
        "a" to true,
        "b" to false,
        "c" to false)

    val count = 100000 // 10万回

    val sonomamaRate = IntRange(1, count).count(fun(_: Int): Boolean {
        val selectBox = boxes.keys.shuffled().first()
        return boxes.getOrDefault(selectBox, false)
    }).toDouble() / count

    val naosuRate = IntRange(1, count).count(fun(_: Int): Boolean {
        val selectBox = boxes.keys.shuffled().first()
        val nextSelectBox = boxes.keys
            .filterNot({ selectBox.equals(it) })
            .shuffled().first()
        return boxes.getOrDefault(nextSelectBox, false)
    }).toDouble() / count

    val montyRate = IntRange(1, count).count(fun(_: Int): Boolean {
        val selectBox = boxes.keys.shuffled().first()
        val openBox = boxes.keys
            .filterNot({ selectBox.equals(it) })
            .filterNot({ boxes.getOrDefault(it, false) })
            .shuffled().first()
        val nextSelectBox = boxes.keys
            .filterNot({ openBox.equals(it) })
            .shuffled().first()
        return boxes.getOrDefault(nextSelectBox, false)
    }).toDouble() / count

    val montyHallRate = IntRange(1, count).count(fun(_: Int): Boolean {
        val selectBox = boxes.keys.shuffled().first()
        val openBox = boxes.keys
            .filterNot({ selectBox.equals(it) })
            .filterNot({ boxes.getOrDefault(it, false) })
            .shuffled().first()
        val nextSelectBox = boxes.keys
            .filterNot({ selectBox.equals(it) || openBox.equals(it) })
            .shuffled().first()
        return boxes.getOrDefault(nextSelectBox, false)
    }).toDouble() / count

    println("%.1f%%".format(sonomamaRate * 100))
    println("%.1f%%".format(naosuRate * 100))
    println("%.1f%%".format(montyRate * 100))
    println("%.1f%%".format(montyHallRate * 100))
}


※ 3番目のコードはKotlinです。Kotlinはシンタックス指定が対応していないっぽい。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+2

多分、当てる人が早々に飽きる方に寄ると思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

こんにちは、質問の回答として、数学の理論上の説明と、それを実際にプログラミングで
試行した結果を述べたいと思います。

<理論上の説明>
ここに書くと長くなるのでモンティ・ホール問題とその解説をご覧ください。
結果だけ言うと選択肢を変えないで当たる確率が1/3,選択肢を変えて当たる確率が2/3です。

 説明の訂正

色んな方に指摘を受け、勘違いしていたところを訂正しました。
最初私が書いたのは10000回の中で「選択肢を変えず当たる回数」「選択肢を変えて当たる回数」
を表示したものでした。

おそらく、「選択肢を変える」「選択肢を変えない」をそれぞれ100000回くらい繰り返し、
当たった回数を比較すべきだったと思います。
それぞれ100000回ずつ試行することで得られる結果(当たった回数)を比較することにしました。

間違ったことを書いてしまい すみませんでした。

import java.util.Random;

public class Sum {

   final static String BINGO = "あたり";

   public static void main(String[] args) {
       int trycount = 100000;
       int sum1; 
       int sum2;
       System.out.println("各" + trycount + "回 試行します");

            sum1 = count(trycount, false);
            sum2 = count(trycount, true);

      System.out.println("はじめの選択から変更しない場合");
      System.out.println("当たった回数の合計: " + sum1 + "/" + trycount);
      System.out.println("はじめの選択から変更する場合");
      System.out.println("当たった回数の合計: " + sum2 + "/" + trycount);

   }

   static int count(int tryCount, boolean rechoice) {
       int c = 0;
       for (int i = 0; i < tryCount; i++) {
           boolean b = judge(rechoice); 
           if (b)
               c++;
       }

       return c;
   }

   static boolean judge(boolean rechoice) {//戻り値がfalseなら選択せずにあたった回数が増え,trueなら選択肢を変えて当たった回数が増える
       String[] box = box();
       int FirstChoice = yourChoice(3);
       //rechoiceがtrueのときは選択を変える
       if (rechoice) {

           String []box2 = new String[2];
           int pos = 0;
           for (int i = 0; i < 3; i++) {
               if (FirstChoice != i) {
                   box2[pos] = box[i];
                   pos++;
               }
           }
           for(int i = 0; i < 2; i++){
               if(!box2[i].equals(BINGO)){
                   return box2[1 - i].equals(BINGO);
               }
           }
       } 
       //rechoiceがfalseは選択を変えない
       else {
           return box[FirstChoice].equals(BINGO);


       }
       return true;
  }

   static int yourChoice(int c) {
       Random random = new Random();
       return random.nextInt(c);
   }

   static String[] box() { //当たりの番号をランダムに指定するなら中身のコメントん部分を使う
       String[] box = { "ヤギ", "ヤギ", "ヤギ" };
       //Random random = new Random();
       //int i = random.nextInt(3);
       box[0] = BINGO;
       return box;
   }
}


<結果>(結果には毎回少しの誤差があります。この結果はその中の一つにすぎません)
各100000回 試行します
はじめの選択から変更しない場合
当たった回数: 33545/100000
はじめの選択から変更する場合
当たった回数: 66892/100000

また、10回の試行をして、それセットを100000回ずつ繰り返し、その合計を求めてみます。

public static void main(String[] args) {
       int trycount = 10;
       int try_set = 100000;
       int c1, c2;
       int sum1 = 0; 
       int sum2 = 0;
       System.out.println("各 10回 試行します");
       System.out.println("このセットを" + try_set + "回繰り返します。");
       int i = 0;
      while(i < try_set){

            c1 = count(trycount, false);
            c2 = count(trycount, true);

            /*System.out.println("*** はじめの選択から変更しない場合");
            System.out.println("当たった回数: " + c1 + "/" + trycount);
            System.out.println("*** はじめの選択から変更する場合");
            System.out.println("当たった回数: " + c2 + "/" + trycount);*/

            sum1 += c1;
            sum2 += c2;
            i++;
      }

      System.out.println("はじめの選択から変更しない場合");
      System.out.println("当たった回数の合計: " + sum1 + "/" + trycount * try_set);
      System.out.println("はじめの選択から変更する場合");
      System.out.println("当たった回数の合計: " + sum2 + "/" + trycount * try_set);

   }


<結果>
各 10回 試行します
このセットを100000回繰り返します。
はじめの選択から変更しない場合
当たった回数の合計: 333379/1000000
はじめの選択から変更する場合
当たった回数の合計: 667234/1000000

つまり初めの選択から変更する場合に傾きます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/19 21:35

    結果として載せたのはあくまでも一つの例にすぎません.
    プログラムを実行すると毎回多少の誤差は出ます。

    キャンセル

  • 2018/04/19 22:03

    夜分にすいません。もう一つだけお聞かせください。
    実行してみたところRandom rand = new Random();この文章でエラーシンボルないと言われてしまいます。すいません。

    キャンセル

  • 2018/04/19 22:10

    no_change は a を選ぶ回数で change は b か c を選ぶ回数ですね。
    これはモンティホール問題を解くプログラムではありません。

    キャンセル

  • 2018/04/19 22:21

    if(hit_num == first_choice){
    no_change++;
    }

    これは最初に選択した箱が a であれば no_change を一つ増やすという命令です。
    つまり選択を変える変えない関係なく 1/3 の確立で no_change が一つ増えます。

    次の else if はもっとひどいです。条件が必ず真になるので、結果最初の選択が a でなければ必ず change が増えます。else if でなく else としても同じ結果になります。

    ですから最終的に出るのが「三つの箱のうち a を選ぶ確率」でしかありません。1/3 に決まっています。

    キャンセル

  • 2018/04/20 01:37

    >satou918523さんへ
    class Sumの行の前に以下の行を追加してくださいな。
    import java.util.Random;

    キャンセル

  • 2018/04/20 09:48

    import java.util.Random;を付けるのは忘れてました。
    訂正しておきます。

    キャンセル

  • 2018/04/20 09:58 編集

    Main関数のところだけを見てたので忘れてしまいました。すみません

    キャンセル

  • 2018/04/20 10:15

    import もそうですがそれ以前にロジックが破綻しています。
    if else が必ず真になるということは hint は使わないということです。
    それを踏まえてループ部分を整理すると次のようになります。

    while(loop < 1000000){
    Random rand = new Random();
    int first_choice = rand.nextInt(3);//最初の選択

    if(0 == first_choice){
    no_change++;
    }
    else {
    change++;
    }
    loop++;
    }

    ご覧のように何の意味もありません。
    モンティーホール問題の答えを知っている前提でそれに合わせて出力しているだけです。

    キャンセル

  • 2018/04/20 10:30 編集

    もしかして、選択肢を変えて外れた場合を書いていないからでしょうか?

    キャンセル

  • 2018/04/20 12:17

    箱が四つの場合はどうなりますか?
    同じロジックで数字だけ変えて計算できますか?
    定数を表示すればいいだけならわざわざループさせる必要はありません。
    33333 と 66666 を表示すればいいだけでしょう。
    それでも同じ答えは出ますが、これで問題を解いたと言えますか?

    キャンセル

  • 2018/04/20 12:50

    ?? 箱が4つになったら確率はそれぞれ1/4,3/4となります.少なくとも
    「定数」でありません

    キャンセル

  • 2018/04/20 13:43

    この回答でいいなら定数でいいはずです。
    私の示したコードで同じ結果が出ますし定数の方がより正確な結果が出ます。

    キャンセル

  • 2018/04/20 16:17

    (i)選択肢を変えずにあたる確率は最初の選択が当たることのなので1/3です。
    (ii)選択肢を変えて当たる確率は 「(i)の余事象」なので2/3です。
    これがモンティーホール問題の理論の考え方の一つです。
    ですのであなたが言った「else ifのところがelseになっても結果は同じ」は当然です。

    キャンセル

  • 2018/04/20 16:18 編集

    私がelseのところをelse ifで書いたのは
    モンティーホール問題を知らない状態でもわかるようにするためです。

    キャンセル

  • 2018/04/20 16:21

    このプログラムはモンティーホール問題を「解く」プログラムではありません。
    あくまでも 1/3 であることを知っている者がその事象を列挙するプログラムです。
    知っているなら定数でいいはずです。

    解くだけならループは必要ありません。
    なぜループが必要になるのか考えてみてください。
    ループでは 10000 回程度で正確な確率は出ません。

    キャンセル

  • 2018/04/20 16:27

    このプログラムでやっていることは、1/3 の確立で not_change を増やし、2/3 の確立で change を増やしているだけです。
    モンティーホール問題の肝は「箱を選択した時点で外れの箱が一つ開かれること」です。
    これを単純化したのではモンティーホール問題を解くプログラムとは言えません。
    人間がすでに解いた問題をなぞるだけのプログラムです。

    わかりませんか?
    解がわかっているならプログラムを使う必要はないんです。
    暗算でいいんですよ。

    キャンセル

  • 2018/04/20 16:29

    暗算で私は 1/3 と 2/3 の解を得ました。
    この定数を出力するプログラムに何の価値がありますか?
    あなたのプログラムも同じです。

    たとえて言うなら、迷路を解くプログラムが、迷路が同じであることをいいことにすでに解かれた道をたどるのと同じです。
    迷路を解くプログラムは迷路が変わっても解けなければなりません。

    箱が 4 つに増えて破綻するようなプログラムは解くプログラムではなく解いたふりをするプログラムです。

    キャンセル

  • 2018/04/20 16:30

    横からすみません。
    Zuishin さんがおっしゃっているのは、
    「1+1の解を出力するのに、
    System.out.print(2);
    と書くのは間違い。
    System.out.print(1+1);
    と書くべき。」
    という理解でよろしいですか?

    change か no_change かは、論理的に正しくともショートカットを用いるべきではなく、きちんと場合の数を比べて判断すべき、という意味でよろしいでしょうか?

    キャンセル

  • 2018/04/20 16:35

    あ、それとも「変える試行を1000000回、変えない試行を1000000回行い、結果を比較すべき」というご意見ですか?

    キャンセル

  • 2018/04/20 16:35

    そうです。
    1 + 1 を計算するプログラムならば、2 が必要な時点で破綻しています。

    そしてこの回答では不要な hint という変数を使うことで一見何かを計算しているように見せていますが、これはブラフにすぎません。
    最適化されれば消えてなくなるような値です。
    ブラフでごてごてと飾り立ててはいるが実際には何もしていないプログラムにしか見えません。

    キャンセル

  • 2018/04/20 16:37 編集

    「変える試行を1000000回、変えない試行を1000000回行い、結果を比較すべき」
    でやればよかったのですか?

    キャンセル

  • 2018/04/20 16:40

    もしかして、質問者が意図しているのはプログラミングで確率を求めるのではなく
    実際に試行を何回も繰り返して得た結果がどっちに傾いているか ということですか?

    キャンセル

  • 2018/04/20 16:41

    モンティーホール問題は暗算で解ける問題です。
    暗算で解いて定数を出力すれば結果は得られます。
    しかしそれでは解いたことにはならないでしょう。
    過程こそが必要なものだと思います。

    この質問に関して言えばモンティホール問題だろうという「推測」の域を超えませんが、モンティホール問題であると仮定するならば、「どうやって解くか」こそが必要なものでしょう。

    外れた箱を開ける作業を省いているということは、その過程を省いているということです。
    ならば定数を出力するのと変わりません。

    キャンセル

  • 2018/04/20 16:43

    つまり、100000回ぐらい試行して
    選択肢を変えて当たった回数、外れた回数(つまり、外れた箱を開けた)
    選択肢を変えずにあたった回数、外れた回数を出力すればいいのですか?

    キャンセル

  • 2018/04/20 16:52

    何度も繰り返しているように、結果は暗算で出ます。
    試行しなくても出ます。
    試行してもその程度の数では収束しません。
    ですので試行は不要です。
    プログラミングもコンピューターも不要です。
    ただ一言「変えない方が 1/3 で変える方が 2/3」と言えばそれで終わります。

    それを証明するものであるなら、いいですか?
    わかりきった解を証明するものであるなら、このプログラムでは途中を省きすぎです。
    全部省くのと変わりありません。

    ソースは説明です。
    解き方のアルゴリズムを示すものです。
    しかしこのソースでは解き方は示せていません。
    ただ結果を出力しているだけです。

    キャンセル

  • 2018/04/20 16:54

    この質問をどう解釈するかによると思うのですが、
    「モンティホール問題をモンテカルロ法で求めたい」なのか、
    「モンティホール問題の論理的考え方を知りたい」なのか。

    前者ならきちんと試行をする必要があると思います。
    後者ならコードは不要です。オフトピではないかな、とも思います。

    キャンセル

  • 2018/04/20 16:54

    「実際にやってみた」と言って別のやり方をとったのでは意味がないと思いませんか?

    キャンセル

  • 2018/04/20 16:54

    どう答えれば、質問者が意図した答えになるのですか?

    キャンセル

  • 2018/04/20 17:05

    質問者の意図が結果だけ知りたいのであれば 1/3 と 2/3 を教えてあげてください。
    このプログラムでは誤差が出ます。

    モンテカルロ法で求めたいのであれば、モンティホール問題の手順に従ってください。最適化はできますが、最適化の最たるものは 1/3 と 2/3 の確率を示すだけのものになり、解くとは言えません。

    質問者はモンティホール問題であることを言明していません。
    質問の条件はモンティホール問題であろうと推定される程度でしかありません。
    ですから本来その意図をまず確認して正確な問題を得てから答えるべきでした。

    キャンセル

  • 2018/04/20 17:09 編集

    問題を勘違いしたかもしれません。すみませんでした。

    キャンセル

  • 2018/04/21 16:20

    回答を訂正しました。

    キャンセル

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

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

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

  • JavaScript

    15309questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Java

    13158questions

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

閲覧数の多いJavaの質問