Index exceeds matrix dimensions

2 次查看(过去 30 天)
clear
clc
count_eight=0;
clear
clc
count_eight=0;
RandStream.setDefaultStream = (RandStream('mt19937ar','seed',sum(100*clock)));
roll=input('Enter number of rolls \n');
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
display('End of Program')
roll=input('Enter number of rolls \n');
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
display('End of Program')
ERROR MESSAGE:
??? Index exceeds matrix dimensions.
Error in ==> Homework10 at 51
fprintf('Percentage of times an 8 appeared
%.1f ',count_eight(roll*100));

采纳的回答

Image Analyst
Image Analyst 2011-11-6
Well at least you made a good attempt at it. but count_eight is a scalar while you try to print it out as an array in your fprintf. Try it this way:
clear;
clc;
count_eight=0;
RandStream.setDefaultStream = (RandStream('mt19937ar','seed',sum(100*clock)));
response = inputdlg('Enter number of rolls \n');
roll = str2double(response{1});
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
if dice1+dice2==8
count_eight=count_eight+1;
end
end
message = sprintf('8 appeared %d times in %d rolls = %.2f%%', ...
count_eight, roll, count_eight/roll*100);
uiwait(msgbox(message));

更多回答(2 个)

Sven
Sven 2011-11-6
It's just a small typo, I think:
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
should be:
fprintf('Percentage of times an 8 appeared in %.1f percent of rolls',count_eight/roll*100);
Let me clarify though: The error is caused by a typo. Note however that I don't think the program does what you intend.
Where you have written:
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
Notice that you are only checking if dice one and two add up to 8 after the loop through many dice has finished. Ie, you're only checking once!
I think you want:
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
if dice1+dice2==8
count_eight=count_eight+1;
end
end
There is, however, an even better way of doing that. This way is very "MATLABBY" because it doesn't use loops:
dice1 = randi(6,roll,1);
dice2 = randi(6,roll,1);
count_eight = sum(dice1+dice2 == 8);

Chris
Chris 2011-11-7
Thanks for the advice guys.

类别

Help CenterFile Exchange 中查找有关 Entering Commands 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by