Trying to create a random date using randi and if-elseif-else statements
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I'm currently attempting to write code that can generate a random date. However I am running into issues while writing a conditional statement to ensure that the correct amount of days are in each month. (To ensure I dont get the 31st of Feb as an answer for example.) This is what I have so far, later I wish to generate a day and then assign the month and day into a 1x2 matrix. This always gives me "days = 31" no matter what. I also want to mention that I desire to use a conditional statement for this.
function dates = dategen(N)
month = 0;
days = 0;
month = randi(12)
if month == 1 || 3 || 5 || 7 || 8 || 10 || 12
days = 31
elseif month == 4 || 6 || 9 || 11
days = 30
else
days = 28
end
0 commentaires
Réponses (2)
KSSV
le 8 Avr 2022
theday = randi(31) ; % random day out of 31 days
themonth = randi(12) ; % random month out of 12 months
theyears = 1980:2022 ; % give the list of years you want
theyear = theyears(randperm(length(theyears),1)) ; % pick random year
thedate = datetime(theyear,themonth,theday)
Or other option is generate all the dates and pick from it randomly.
thedates = (datetime(1980,1,1):days(1):datetime(2022,4,8))' ;
thedate = thedates(randperm(length(thedates),1))
0 commentaires
Voss
le 8 Avr 2022
Modifié(e) : Voss
le 8 Avr 2022
To understand why your code gives you days = 31 every time, consider the following:
% Case 1: seems to work ok
month = 1;
if month == 1 || 3
disp('month is 1 or 3')
else
disp('month is not 1 and not 3')
end
% Case 2: apparently wrong
month = 2;
if month == 1 || 3
disp('(month is 1) or (3)')
else
disp('(month is not 1) and (not 3)')
end
% Case 3: correct
month = 2;
if month == 1 || month == 3
disp('(month is 1) or (month is 3)')
else
disp('(month is not 1) and (month is not 3)')
end
5 commentaires
Voss
le 8 Avr 2022
output = dategen(3)
function dates = dategen(N)
% initialize Nx2 matrix of zeros:
dates = zeros(N,2);
% loop N times:
for ii = 1:N
month = randi(12);
if month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12
day = randi(31);
date = [day, month];
elseif month == 4 || month == 6 || month == 9 || month == 11
day = randi(30);
date = [day, month];
else
day = randi(28);
date = [day, month];
end
% set the ii-th row of the output dates to be
% the day and month just generated:
dates(ii,:) = date;
end
end
Voir également
Catégories
En savoir plus sur Calendar dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!