2016-10-11 9 views
1

私は正しいことが5分の1のチャンスを持つプログラムを書いています。その後、情報をファイルに出力する必要がありますが、実行しようとすると2回目のループを実行するように見えますが、何度もスキャナに依頼します。 forループと同じ時間を使うには、whileループの中のすべてが必要です。なぜなら、私はそれをとって、20%を得るまでに何度も平均を求めるからです。このトピックについての助言は非常に高く評価されます。Java - Loop issues

編集 - 私は具体的に与えられている入力は、私は1000に設定すると私はプログラムを開始すると、私はループを繰り返しループとその中のすべてを1000回見ることを期待しています。人それぞれどのように多くのボトルのキャップを決め

  1. : -

    編集2私はそれが私がのオフに行くために私はここにプロジェクトをやってんだ、オフの私のガイドラインをしているつもりだったものを追加したいです勝利キャップを見つけるためにオープンしなければならない。 (これは1つの試行を表します)。この値をテキストファイルに出力します。

  2. 試行回数をユーザーに要求します。 1000回以上の試行を行います。
  3. すべての試行のデータを出力ファイルから読み込みます。
  4. 賞金を獲得するために開いたキャップの平均数を計算します。
  5. 結果を画面に印刷します。

    import java.util.Random; import java.util.Scanner; import java.io.IOException; import java.io.PrintWriter; import java.io.File; パブリッククラスは、ループ反復のためrandomNumすべてをリセットする必要{にIOException {

    PrintWriter outFile = new PrintWriter(new File("EBoost Chance.txt")); 
    Scanner in = new Scanner(System.in); 
    Random rand = new Random(); 
    
    System.out.print("How many trials will you run? "); 
    int trials = in.nextInt(); 
    int totalTrials = 0; 
    
    int randomNum = 0; 
    int winCounter = 0; 
    int counter = 0; 
    int bottleCap = 1; 
    int max = 5; 
    int min = 1; 
    double percentage = 0.0; 
    
    for (totalTrials = 0; totalTrials <= trials; totalTrials++) 
    { 
        counter = 0; 
        winCounter = 0; 
        while (randomNum != 1) 
        { 
         randomNum = rand.nextInt((max - min) + 1) + min; 
         if (randomNum == 1) 
         { 
          winCounter++; 
          counter++; 
          outFile.println("You would win in " + counter + " bottles."); 
         } 
         else if (randomNum != 1) 
         { 
          counter++; 
         } 
        } 
    } 
    outFile.close (); 
    

    } 公共の静的な無効メイン(文字列[]引数)スロー}

+0

悪い質問ではありません。しかし、あなたが入力したプログラムの正確な内容、正確にどの出力が得られたのか、正確にどのような出力が得られるのか、より具体的にする必要があります。これらの詳細は、あなたを助けることをはるかに容易にします。質問を編集して追加してください。 – nhouser9

+0

これは、ユーザーが5を入力した場合、 'for'ループと' while'ループの両方を5回実行することを希望していると言いますか?今は 'while'ループが' randomNum' == 1(最初の 'for'ループ反復内)まで実行されるので、何も残っていないので、' for'ループは常に1回だけ実行されます。 –

+0

@ Hack-R forループがすべてを内部で実行するようにしたいのですが、何度も試行変数を設定します。私はそれをそうするために何をするだろうか分からないrandomNum == 1はそれの後で止まらない。申し訳ありませんが、ここで私はまだJavaに導入されている非常にシンプルなものが欠けている。 –

答えて

3

を をBottleCapPrize。そうでなければ、randomNumは前回の反復と同じように1になるため、whileループは決して入力されません。

import java.util.Random; 
import java.util.Scanner; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.io.File; 

public class Main 
{ 
    public static void main(String[] args) throws IOException 
    { 

     PrintWriter outFile = new PrintWriter(new File("EBoost Chance.txt")); 
     Scanner in = new Scanner(System.in); 
     Random rand = new Random(); 

     System.out.print("How many trials will you run? "); 
     int trials = in.nextInt(); 
     int totalTrials = 0; 

     int bottleCap = 1; 
     int max = 5; 
     int min = 1; 
     double percentage = 0.0; 

     for (totalTrials = 0; totalTrials <= trials; totalTrials++) 
     { 
      int counter = 0; 
      int winCounter = 0; 
      int randomNum = 0;  // this was moved from outside the for 
      while (randomNum != 1) 
      { 
       randomNum = rand.nextInt((max - min) + 1) + min; 
       if (randomNum == 1) 
       { 
        winCounter++; 
        counter++; 
        outFile.println("You would win in " + counter + " bottles."); 
       } 
       else if (randomNum != 1) 
       { 
        counter++; 
       } 
      } 
     } 
     outFile.close(); 
    } 
}