我正在尝试使用MATLAB fprintf命令将存储在矢量中的字符串的分隔表打印到文本文件中。选择和打印来自向量的哪些字符串取决于在程序的主要while循环中构造的矩阵。但是,当我尝试运行代码时,MATLAB给出了一个错误,即“下标索引必须是正整数或逻辑”。给出了一个示例矩阵和示例字符串数组,以及我当前的fprintf代码。我真的很想了解这里发生了什么,以及如何更好地设置它的任何希望或指示。矩阵和单元格数组是我在运行程序时获得的实际示例。提前谢谢!
Pitches={'Fastball','Curveball','Screwball','Riseball','Changeup','Dropball'};
tp={'Strike','Ball'};
ResultHit={'Single','Double','Triple','Home Run','Bunt','ROE'};
ResultOut={'Strikeout','Groundout','Flyout','Foulout'};
M= [4,1,0,0;2,2,0,0;3,1,0,0;5,1,1,0];
fileID = fopen('gamedata.txt','w');
for i=1:length(M)
fprintf(fileID,'%s %s %s %s\n',Pitches{M(i,1)},tp{M(i,2)},...
ResultHit{M(i,3)},ResultOut{M(i,4)});
end
fclose(fileID);
答案 0 :(得分:1)
M 矩阵在第三和第四列中有零:
M =
4 1 0 0
2 2 0 0
3 1 0 0
5 1 1 0
所以当代码开始在 for 循环中迭代时, M(1,3)和 M(1,4)是零和是 ResultHit 和 ResultOut 数组中的无效索引...因此错误消息(索引必须是正整数)。
我认为你需要的是' N / A' ResultHit 和 ResultOut 数组中的字符串,对应于该音高上没有命中或没有输出。这些都可能位于数组的第一个位置,而 M 从上面变为
M =
4 1 1 1
2 2 1 1
3 1 1 1
5 1 2 1
这应该允许代码进展。