前提
java初心者です。プログラミング学習のために、試しにパチンコのあたりに関するプログラムを作成し、投資出玉と実際に出た出玉、回転数などを表示するようにしたいです。
該当のソースコード
Java
1import java.util.Random; 2public class TMfin { 3 public static void main(String[] args){ 4 System.out.println("1~10までの中で数字を選んでください。"); 5 int num=new java.util.Scanner(System.in).nextInt(); 6 int sam=0; 7 Random rand =new Random(); 8 int back=450; 9 int count=1; 10 int threshold=60; 11 int threshold2=81; 12 while(true){ 13 int heso=(int)(Math.random()*10)+1; 14 if(heso==num){ 15 System.out.println("1~319までの中で数字を選んでください。"); 16 int num2=new java.util.Scanner(System.in).nextInt(); 17 while(true){ 18 int unicorn=(int)(Math.random()*319)+1; 19 if(unicorn==num2){ 20 System.out.println("大当たり!"); 21 System.out.println(sam+"回目! 投資約"+(sam*10)+"球!"); 22 int value=rand.nextInt(101); 23 if(value>=threshold){ 24 System.out.println("単発、、"+back+"球獲得"); 25 sam=0; 26 break; 27 }else if(value<threshold){ 28 while(true){ 29 if(value<threshold2){ 30 count++; 31 back+=1500; 32 }else{ 33 System.out.println("継続"+count+"回!"+back+"球獲得!"); 34 sam=0; 35 break; 36 } 37 } 38 } 39 }else{ 40 sam+=1; 41 } 42 } 43 }else{ 44 sam+=1; 45 } 46 } 47 } 48}
これを実行すると初当たりの数と投資球数のみが表示されてしまいます。どこが間違っているのでしょうか。
追記
このプログラムでは10回に1回抽選されるとし、大当たり確率は319分の1として計算しています。
rash突入率60%、継続率は81%、初当たり450発、その後はオール1500発としています。3000フィーバーはないものとして仮定したユニコーンです
>これを実行すると初当たりの数と投資球数のみが表示されてしまいます。
パチンコをやらないのでどういうことなのか全く分からないのですが、どういう表示になるはずがどうなっているのか、質問に追加編集して、入力も含めてそちらでの表示状態をソースコートと同じようにマークダウンでご提示願えますか。
28~37 行目の
>while(true){
> if(value<threshold2){
> count++;
> back+=1500;
> }else{
> System.out.println("継続"+count+"回!"+back+"球獲得!");
> sam=0;
> break;
> }
>}
は、 value < threshold2 の場合ループが終わりません。
返信ありがとうございます。一様出力的には319分の1を何回で当てられるのか、その後60%であたりを引けるかどうかの抽選を行うようにしています。これに外れた場合、単発、、450球獲得 と表示されるように想定しました。
60%の抽選を当てた場合、次に81%の抽選を行います。81%の抽選を当てた場合、1回当たるごとに変数backに1500を足していくようにしました。例えば2回81%を当てれば、back=3450 といった感じです。81%の抽選を外れると、継続2回! 3450球獲得! といった表示がされることを予定しておりました。
もう一度確認しましたがなぜこの場合だとループが終わらないのでしょうか? どこを修正したら動きますか?
>60%の抽選を当てた場合、次に81%の抽選を行います。
コードでは 60% の抽選が threshold と比較している 22 ~ 23 行目がそれと思いますが、 81 % の抽選というのは threshold2 との比較は 29 行目にあっても乱数の生成が無く 60 % の時の抽選の乱数値をそのまま使っています。
その為、 28 行目の while ループ中は value 変数は値が変わりませんので、
value < threshold2
は一度成立すると二度と不成立にはなりません。

回答1件
あなたの回答
tips
プレビュー