Проблема дня рождения в java
Все, должно быть, слышали о знаменитой "проблеме дня рождения" (можно обратиться к Википедии). Мне нужно написать для него метод (тип double) на Java, который принимает 2 параметра как "size" и "count". Я откуда-то получил код, но он не работает на грейдере.
public double calculate(int size, int count)
Мне нужно заставить этот метод работать.
Поскольку я новичок в CS, подробное объяснение было бы очень ценно. (Это для моего курса разработки приложений для android)
Редактировать:
После достаточной работы я получил следующий код.
import java.util.*; public class Main { public static void main(String[] args) { int size = 23; int count = 1000; int match=0; for(int i=0; i<count; i++){ ArrayList<Integer> birthdayList = new ArrayList<Integer>(); for(int j=0; j<size;j++){ Random r = new Random(); int i1 = r.nextInt(365 - 0 + 1) + 0; birthdayList.add(i1); } boolean foundDupe=false; for(int z: birthdayList){ if(arrayCount(birthdayList,z)>1){ foundDupe=true; } } if(foundDupe=true){ match = match+ 1; } } double prob = (double)match/(double)count; System.out.println(prob); } public static int arrayCount(int[] array, int item) { int amt = 0; for (int i = 0; i < array.length; i++) { if (array[i] == item) { amt++; } else { amt = amt; } } return amt; }}
Проблема здесь в том, что когда я вызываю метод "arrayCount" с массивом "birthdayList" в качестве параметра, я получаю ошибку.
Что я уже пробовал:
import java.util.*; public class Main { public static void main(String[] args) { int size = 23; int count = 1000; int match=0; for(int i=0; i<count; i++){ ArrayList<Integer> birthdayList = new ArrayList<Integer>(); for(int j=0; j<size;j++){ Random r = new Random(); int i1 = r.nextInt(365 - 0 + 1) + 0; birthdayList.add(i1); } boolean foundDupe=false; for(int z: birthdayList){ if(arrayCount(birthdayList,z)>1){ foundDupe=true; } } if(foundDupe=true){ match = match+ 1; } } double prob = (double)match/(double)count; System.out.println(prob); } public static int arrayCount(int[] array, int item) { int amt = 0; for (int i = 0; i < array.length; i++) { if (array[i] == item) { amt++; } else { amt = amt; } } return amt; }}
[no name]
Что ж, это прекрасная возможность для вас освоить навык запуска вашего кода в отладчике.
Richard MacCutchan
Может быть, это поможет, если вы объясните, что этот код должен делать и что вы подразумеваете под этим "это не работает на грейдере".
Abdul Basit Khan
Поскольку это одно из онлайн-заданий, оно оценивается по онлайн-программе. Так что код, который я привел здесь, не работает, и мне нужна помощь в этом. Код является решением "проблемы дня рождения" и должен принимать два параметра в данном методе.
Примечание: размер: размер группы, количество: количество симуляций
Richard MacCutchan
Вы до сих пор не объяснили, что должен делать код и почему он не работает.
Abdul Basit Khan
Проблема парадокса дня рождения-очень известная проблема, которую вы можете увидеть здесь:
https://en.wikipedia.org/wiki/Birthday_problem
Итак, что мне нужно сделать, так это сделать код на Java для этой проблемы, для данного метода:
public double calculate(int size, int count)
Где пользователь вводит размер людей и количество симуляторов.
Учитель дает следующее сообщение об ошибке:
------------------------------ Оценка Назначения-----------------------------
----------Ваше решение пропустило баллы по следующим разделам классификации:---------
testCalculateThreshold
Оценка По Рубрике: 0.0/40.0
Цель: цель этой оценки состоит в том, чтобы проверить вычисление с возвращаемыми значениями внутри
порог
Ссылка: этот тест не выполняется, когда: метод расчета не соответствует пороговому значению 3%.
testResultRange
Оценка По Рубрике: 0.0/40.0
Цель: цель этой оценки - протестировать Resulttrange
Ссылка: этот тест не выполняется, когда: calculate возвращает значение за пределами диапазона.
[no name]
Итак, вы хотите, чтобы мы исправили какой-то код, который вы не писали, чтобы решить какую-то проблему, о которой мы ничего не знаем, чтобы получить оценку от какого-то случайного веб-сайта, с которым мы не связаны?
Abdul Basit Khan
Я написал код, который вы можете увидеть в посте. Чтобы узнать проблему, я разместил ссылку на нее. И, очевидно, его оценка для моего курса, так что вы этого не знаете.
[no name]
Так почему же вы сказали, что получили его откуда-то еще? Если вы написали его, то вы его отлаживаете. Вы единственный, кто знает, что значит "не работать".
Richard MacCutchan
Проблема парадокса дня рождения очень известная проблема
Извините, но я никогда о нем не слышал и не планирую использовать Википедию, чтобы узнать, что это такое. Если вы не можете объяснить, что должен делать ваш код и какие ошибки вы видите,то мы не сможем вам помочь.
Abdul Basit Khan
После достаточной работы я получил следующий код.
импорт java. util.*;
основных публичных класс {
публичный статический пустота главный(строка[] аргументы) {
int size = 23;
int count = 1000;
int match=0;
для(тип int я=0; Я&л;граф; я++){="" ArrayList и Л;число=""&ГТ; birthdayList = новый ArrayList и Л;целое&ГТ;();
для(Int J=0 и; Ж&Л;размер;к++){ случайный="" Р="новый" случайный();="" интервал="" П1="Р.nextInt(365" -="" 0="" +="" 1)="" 0;="" birthdaylist.добавить(и1);="" }="" логическое="" founddupe="значение " false";" для(int="" з:="" birthdaylist){="" если(arraycount(birthdaylist,з)=""&ГТ;1){
foundDupe=истина;
}
}
если(foundDupe=истина){
матч = матч+ 1;
}
}
двойная проблема = (Double)в матче/(двуспальная)граф;
Системы.из.код println(возм);
}
public static int arrayCount(int[] array, int item) {
int amt = 0;
for (int i = 0; i & lt; array. length; i++) {
if (array[i] = = item) {
количество++;
}
ещё {
amt = amt;
}
}
возврат АМТ;
}}
Проблема здесь в том, что когда я вызываю метод "arrayCount" с массивом "birthdayList" в качестве параметра, я получаю ошибку.