咋修改for i = 1:n_gateway % 第一层网关节点状态 idx1 = (gateway1(i, 1)-1)3n1 + (gateway1(i, 2)-1)*3 + gateway1(i, 3); state1(idx1) = randi([0, 3]); % 第二层网关节点状态 idx2 = (gateway2(i, 1)-1)3n2 + (gateway2(i, 2)-1)*3 + gateway2(i, 3); state2(idx2) = randi([0, 3]); end fclose(file);数组索引必须为正整数或逻辑值。 出错 oooo (line 723) state1(idx1) = randi([0, 3]);
时间: 2023-09-06 09:13:08 浏览: 98
idx1-ubyte.rar idx3-ubyte.rar
可以尝试修改为如下代码:
```
for i = 1:n_gateway
% 第一层网关节点状态
idx1 = (gateway1(i, 1)-1)*3*n1 + (gateway1(i, 2)-1)*3 + gateway1(i, 3);
state1(round(idx1)) = randi([0, 3]);
% 第二层网关节点状态
idx2 = (gateway2(i, 1)-1)*3*n2 + (gateway2(i, 2)-1)*3 + gateway2(i, 3);
state2(round(idx2)) = randi([0, 3]);
end
fclose(file);
```
这里使用 round 函数将 idx1 和 idx2 四舍五入为整数,确保数组索引是正整数。同时,需要注意,MATLAB中的数组索引必须为正整数或逻辑值,不能使用其他类型的值。
阅读全文