我如何改变我的代码停止一个for循环简单地替换行输出在一个合适?

1视图(过去30天)
Ed围场
Ed围场 2021年6月4日
评论道: Ed围场2021年6月7日
函数drainage_system_design_rough
n =输入(“系统中有多少管道?”);
参照= (1:1:n);
参照= 1:n
disp (“管参考:
disp(参照)
L =输入(的管道长度:);
时间=输入(“你想在排水计划中增加管道吗?”(= 1,否= 0)?:“);
如果安排= = 1
={上校“管长度(m)”};
行={参照};
dat = {1};
场上(“columnname”上校,“rowname”、行“数据”dat);
结束
结束
我真的是新的MATLAB,但想创建一个简单的表存储排水系统信息。我希望用管道引用(管道引用的数量取决于系统中的管道数量)来标记表中的行。但是,每次执行for循环时,表中只存储最后一个管道的信息,并替换前一个管道的信息。如果有什么方法可以帮助我更好地编写代码,以便我有一个表,每次执行for循环时都添加行,但也存储前面的行,这将是非常感谢的。

接受的答案

克里斯·拉皮埃尔
克里斯·拉皮埃尔 2021年6月4日
Uitables没有附加模式。当您指定数据时,您要么需要 指定特定行 ,或重新加载所有数据。给定所需的功能,我的方法是首先提取现有值/行名,然后将新值附加到末尾,并将组合值作为表数据传递回去。
fig=UIFig;
外的=场上(图,“columnname”“管长度(m)”“行名”{},“数据”[]);
n =输入(“系统中有多少管道?”);
参照= (1:1:n);
参照= 1:n
disp (“管参考:
disp(参照)
L =输入(的管道长度:);
时间=输入(“你想在排水计划中增加管道吗?”(= 1,否= 0)?:“);
如果安排= = 1
外的。Data = [uit.Data; L];
外的。RowName = {uit.RowName{:};参照};
结束
结束
7评论
Ed围场
Ed围场 2021年6月7日
嗨,克丽丝,谢谢你。你能看到下面的代码吗?我已经扩展了原始代码,现在包括多个输入,我需要在我的适合,所以我需要保持for循环的结构,为不同的管道输入不同的值。如前所述,我如何更改这段代码以消除错误消息,并将其扩展到需要为独立列的多个输入?
函数drainage_system_design_rough3
fig=UIFig;
外的=场上(图,“columnname”“管长度(m)”“行名”{},“数据”[]);
n =输入(“系统中有多少管道?”);
参照= (1:n);
参照= 1:n
disp ('请输入以下管道的数据'
disp (“管参考”
disp(参照)
USMHRef =输入(“上游人孔参考:”);
Dia =输入('管径(mm): ');
L =输入('管道长度(m): ');
K =输入('管道粗糙度值:');
USCL =输入(“上游覆盖水平(mAOD)”:);
USIL =输入('上游仰拱水位(mAOD):');
G =输入(期望的管道梯度:);
时间=输入(“你想在排水计划中增加管道吗?”(= 1,否= 0)?:“);
如果安排= = 1
外的。Data = [uit.Data; L];
uit.RowName={uit.RowName{:};1:n};
结束
结束

登录评论。

答案(1)

本杰明·克劳斯
本杰明·克劳斯 2021年6月4日
当前编写的代码在每次循环运行时都创建一个全新的uitable。
你需要更新代码:
  1. 收集所有数据,然后用所有数据创建一个合适的once。
  2. 在开始时创建一个合适的对象,然后向现有的合适对象添加数据。
选项1的示例:
ncols = 4;
nrows = 4;
colnames =细胞(ncols, 1);
rownames =细胞(nrows, 1);
data =细胞(nrows, ncols);
r = 1: nrows
c = 1: ncols
行名{r}=[“行”num2str (r)];
colnames {c} = [“列”num2str (c)];
数据{r、c} = r * c;
结束
结束
场上(“ColumnName”colnames,“RowName”rownames,“数据”、数据)
选项2示例:
tbl=uitable;
资源描述。RowName = {};
资源描述。ColumnName = {};
资源描述。数据= {};
ncols = 4;
nrows = 4;
r = 1: nrows
c = 1: ncols
资源描述。RowName {r} = [“行”num2str (r)];
资源描述。ColumnName {c} = [“列”num2str (c)];
资源描述。数据{r、c} = r * c;
结束
结束
这两种方法的最终结果是一样的,但第一种方法的效率要高得多。
1评论
Ed围场
Ed围场 2021年6月7日
你好,本杰明,谢谢你的帮助。我已经尝试在我的代码中实现您的两个建议。
  • 对于第一个选项,我发现我得到了一个与最初问题相似的问题,只有通过For循环进入的最后一个管道的信息存储在合适的?
  • 对于第二个选项,我发现没有数据被添加到在代码开始时创建的表,所以我只留下一个空白表?
下面我粘贴了我用过的两个代码(注意,与我原来的代码相比,输入已经扩展了),如果您能提供任何帮助,将不胜感激:
在代码末尾创建的表:
函数drainage_system_design_rough2
n =输入(“系统中有多少管道?”);
参照= (1:n);
参照= 1:n
disp ('请输入以下管道的数据'
disp (“管参考”
disp(参照)
USMHRef =输入(“上游人孔参考:”);
Dia =输入('管径(mm): ');
L =输入('管道长度(m): ');
K =输入('管道粗糙度值:');
USCL =输入(“上游覆盖水平(mAOD)”:);
USIL =输入('上游仰拱水位(mAOD):');
G =输入(期望的管道梯度:);
结束
ncols=7;
nrows = n;
r = 1: nrows
c = 1: ncols
rownames = {1: n};
colnames = {“管Dia (mm)”“管梯度”“管长度(m)”管道粗糙度的“我们MH”“我们CL (mAOD)”“我们IL (mAOD)”};
data = {Dia, G, L, K USMHRef USCL, USIL};
结束
结束
场上(“ColumnName”colnames,“RowName”rownames,“数据”、数据);
在代码开始时创建的表:
函数drainage_system_design_rough3
台=场上;
rownames = {};
colnames={};
数据= {};
n =输入(“系统中有多少管道?”);
参照= (1:n);
参照= 1:n
disp ('请输入以下管道的数据'
disp (“管参考”
disp(参照)
USMHRef =输入(“上游人孔参考:”);
Dia =输入('管径(mm): ');
L =输入('管道长度(m): ');
K =输入('管道粗糙度值:');
USCL =输入(“上游覆盖水平(mAOD)”:);
USIL =输入('上游仰拱水位(mAOD):');
G =输入(期望的管道梯度:);
结束
ncols=7;
nrows = n;
r = 1: nrows
c = 1: ncols
rownames = {1: n};
colnames = {“管Dia (mm)”“管梯度”“管长度(m)”管道粗糙度的“我们MH”“我们CL (mAOD)”“我们IL (mAOD)”};
data = {Dia, G, L, K USMHRef USCL, USIL};
结束
结束

登录评论。

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!