全球FlexSim系统仿真中文论坛

搜索
查看: 6562|回复: 6
打印 上一主题 下一主题

Mergesort上产品类型与端口数目不相等的问题

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:, z" f; I% l, V7 l% s- O. Q, `
{2 g2 k" a) ~9 E  Q& z
case 1: return getitemtype(item) == 1; break;
2 g5 N# u# M% e6 c1 e9 wcase 2: return getitemtype(item) == 2||3;break;
) h  o( L: Q1 W" Y+ z+ r5 p, ~}- t) K3 x6 F& R( e# d' r
结果成功了。但是,+ n3 ?1 W9 @' q; w& E! \
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:/ I9 s" ^* D8 Z0 Y% t" V
switch(port)  q: _7 U' j/ o' I, U
{9 d1 [( ~0 i! T6 v
case 1: return getitemtype(item) == 1||2; break;
) I# B/ p3 W8 `$ K. U! y7 ^. y# _case 2: return getitemtype(item) == 3;break;+ B! M4 A6 S+ z, x/ o$ ?0 k
}0 \7 @3 H7 \) \, L0 [3 X
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?/ I" g: d& N' _" [
有谁有关于Megesort的详细介绍吗?
2#
wj109260758 发表于 2010-6-14 01:17:42 | 只看该作者
很奇怪,我也发现了
3#
wj109260758 发表于 2010-6-14 01:31:00 | 只看该作者
convery 却可以
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;' s: C5 K( R0 @: o, }/ E
case 2: return getitemtype(item) == 3;
8 L) p% p& m9 b1 n3 N; d( P; q7 K, `1 l$ A7 c: ^9 g2 e
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
( h$ P" W; d" I2 v: P1 z5 u等于 case 2: return 2||3;
3 A! z$ B1 p9 r# X' V9 w等于: return 1;9 A+ {, L! R. F. o5 a( t
你的第一个程序相当于:
# x% Y7 x9 |$ k7 Ucase 1: return getitemtype(item) == 1; * X9 T* s: \+ m& G
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
6 `. ~& Q2 l) Y# h, j2 x) t0 a9 G* F5 X7 o: K
所以第二个你的程序可以解读为:
" N5 V! g+ U3 a( @. D. Tswitch(port)
, Q5 c4 n( Y! ?6 [4 B{8 X; i6 _! m% n9 w
case 1: return 1;(相当于所有实体可以从出口1流出)
8 `4 h9 K/ l$ l* _case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)8 a8 o& A- f- T
}8 I. |" u  V/ D( e0 c/ H# j; W. B
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
# h& w, v0 z: i  L0 K
2 [1 M- @. |4 s& J3 _如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;6 t  ?0 L( z* H  x- ]5 x% I# D7 W2 u
等于 case 2: return 2||3;/ M+ p+ i8 K) n+ Z' p3 y
等于: return 1;/ |4 G  H1 E, [
你的第一个程序相当于:
/ I  Y' j- e; ~9 G+ m$ z/ p+ kcase 1: return getitemtype(item) == 1; 1 P$ D* _4 t. D- S" @
case 2: return 1;在Megesort中最后一个出口,可 ...: H% Z( n( `# J* j- @
wj109260758 发表于 2010-6-14 05:15
" R& H1 ~6 c$ h; b

* |" t1 v" W8 y% w$ I1 |( R1 C8 H理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。, I: J8 e1 c: y: C  F
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真& Z0 p0 E, x+ v6 ]( p: J

$ q' ~- U: A& p# H这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-9-1 16:27 , Processed in 0.082110 second(s), 13 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表