私は誕生日のパラドックスを表すプログラムを作ろうとしています。私はパラドックスを理解し、私のコードは間違っていると確信していますが、どこが間違っているのか分かりません。私は関連する記事を見てきましたが、役に立たないものは何も見つかりませんでした。私は若い頃にコードを書いていたので、ちょっと混乱してもごめんなさい。私はそれを行う他の方法があることを知っています、そして、なぜそれらの仕事を理解します。私はちょうど私のコードが動作しない理由を知りたい。ありがとう!Java:誕生日のパラドックス
EDIT:申し訳ありません。私の実際の問題が何であったかを忘れてしまった。私はそれを実行し、理論値である約50.5%を得ることを期待しています。しかし、代わりに、私は約21.1%を取得します。
public class Main {
static int trialsSucceeded = 0; // Stores number of successful trials
static final int TRIALS = 1000000; // 1,000,000 is a good number :) Biggest I've tried: 2,147,483,647, which is Integer.MAX_VALUE
static int numberOfPeople = 23; // The 'n' value for the birthday paradox
public static void main(String[] args) {
ArrayList<Integer> birthdays = new ArrayList<Integer>(); // Stores people's birthdays
// Runs until desired trials are completed
for (int trialNumber = 0; trialNumber < TRIALS; trialNumber++) {
// Provides progress updates to user
if (trialNumber % 1000 == 0)
System.out.printf("%.1f%% complete\n", (double) trialNumber * 100/TRIALS);
// Populates the birthdays array
for (int personNumber = 0; personNumber < numberOfPeople; personNumber++) {
birthdays.add(getRandInt(1, 365));
}
// Used later to see if current trial should end
int prevTrialsSucceeded = trialsSucceeded;
// Checks each person's birthday against everyone else's
for (int i = 0; i < birthdays.size(); i++) {
for (int j = i + 1; j < birthdays.size(); j++) {
// If birthdays match, marks trial as a success jumps to next trail
if ((birthdays.get(i) == birthdays.get(j))) {
trialsSucceeded += 1;
break;
}
}
// Jumps to next trial if this one has already succeeded
if (prevTrialsSucceeded != trialsSucceeded) {
break;
}
}
// Clears list of birthdays to get ready for next trial
birthdays.clear();
}
// Tells user ratio of successful trials to total trials
System.out.println(((double) trialsSucceeded/TRIALS * 100) + "% of trials succeeded");
}
private static int getRandInt(int lowerBound, int upperBound) {
// Returns random integer between lowerBound and upperBound
Random random = new Random();
return random.nextInt(upperBound - lowerBound + 1) + lowerBound;
}
}
コード[動作しません](http://importblogkit.com/2015/07/does-not-work/)? –
@Hadesあなたはテストケースとサンプル出力を提供しました。 – Enzokie
@RobertColumbia私の目はもう働きません。 – shmosel