全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
% @6 u4 i" D( J' s{, u* m" m+ [! H# }8 b% j2 b1 j* o5 }0 H
case 1: return getitemtype(item) == 1; break;. i5 Q' L9 c# S& k5 R2 Z
case 2: return getitemtype(item) == 2||3;break;4 a9 Y7 Y, ?- S; _; r) H8 L, T5 y0 t
}
' m& [5 E+ E5 u. z8 v结果成功了。但是,
8 T' U5 \: [; P9 Q5 M8 E4 N$ q如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:6 o+ z" f. @) [+ o
switch(port)
! y1 ^: F: j. m. }* p- A7 i1 |{
7 F* X  f+ |6 @$ o5 F; Ycase 1: return getitemtype(item) == 1||2; break;2 b1 E) C  j2 ^! ^! J9 c
case 2: return getitemtype(item) == 3;break;
" F8 o9 w  W& M7 x  A0 I}! u' y' T# ^' b) |
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
& O+ I# D: H% m5 F3 [. e( }. u2 w有谁有关于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;8 X' \/ \) G) ?+ A9 j; i, j
case 2: return getitemtype(item) == 3;4 \1 |' X8 `; Q/ V6 b
9 I' i7 d- r+ s# l+ b. }- ^
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
1 c6 J8 d+ R& X" @' [6 j等于 case 2: return 2||3;
) k$ x( k" ~3 |; M! I/ |# Y9 i" B等于: return 1;
* W! H2 j: N( u  Z你的第一个程序相当于:
3 H* o; S; Z2 m& M& O7 jcase 1: return getitemtype(item) == 1;
2 S9 `! S3 X& X& z8 I& Mcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!. ?1 O1 @8 w  E2 A, p7 E
" Y2 j  S8 N; A. t$ R
所以第二个你的程序可以解读为:
: V! @! y/ U5 ~" mswitch(port)
4 T. y/ S) p- b# E$ @. ^{2 ^. Y/ F0 E# y" C+ w
case 1: return 1;(相当于所有实体可以从出口1流出)
' h) T! Y& C! |9 w! B  S; C& g5 \case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
7 v' u$ N) J3 o/ ]0 j}/ S; g: Q/ i7 P* i2 ?% q7 D
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。' r$ m+ e+ F1 t/ I% o$ m( A- C

1 Q9 g7 i, p3 g5 Z5 Y( ^3 R如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
+ Z6 d2 Y' \2 ?等于 case 2: return 2||3;
7 C. |" h; `% J0 V& E等于: return 1;8 V  _8 g8 b. e5 n% p" A+ `! G) X( O
你的第一个程序相当于:
+ E$ R0 q# Y/ n4 N4 Pcase 1: return getitemtype(item) == 1;
7 B1 P- Z) x2 ]. |8 q) N* u1 ecase 2: return 1;在Megesort中最后一个出口,可 ...
% p7 x$ V, }1 b% B/ twj109260758 发表于 2010-6-14 05:15
6 u; g3 t. H, q6 R
; f( x& U/ S# S; s' q2 q5 c3 g
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。. H* P2 p. R6 k3 ?1 g  P
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
& a* i6 r) `- ^5 i: X- A
+ n* W/ V+ p* V8 d  r  Y- d* v这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 16:06 , Processed in 0.065994 second(s), 13 queries .

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

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