全球FlexSim系统仿真中文论坛

标题: Mergesort上产品类型与端口数目不相等的问题 [打印本页]

作者: ws-lk    时间: 2010-6-12 16:50
标题: Mergesort上产品类型与端口数目不相等的问题
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
: e' e. Q9 g4 Q' ]- s{4 }) O( G: ~- S$ O! z
case 1: return getitemtype(item) == 1; break;
0 r. K. ?) O+ r& n0 Y+ i2 o, s3 z9 _case 2: return getitemtype(item) == 2||3;break;. m# ^$ A2 Y) A7 u) f- g
}; S5 T: K  b( W5 {0 i
结果成功了。但是,( P% E2 V- p! D0 D# m0 _
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
. X7 w5 H5 Q) v4 s1 p' Mswitch(port)
6 j9 q$ n, ~1 E; q{; `4 _5 H8 C: n1 q3 ~* C2 B
case 1: return getitemtype(item) == 1||2; break;  C' b3 @* u8 y' Y, C
case 2: return getitemtype(item) == 3;break;
' E6 U% g* \; {1 T- I}
- @/ D: t  s. p. b! ?% V产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
! ^  u8 [! K7 G2 f2 W( p有谁有关于Megesort的详细介绍吗?
作者: wj109260758    时间: 2010-6-14 01:17
很奇怪,我也发现了
作者: wj109260758    时间: 2010-6-14 01:31
convery 却可以
作者: wj109260758    时间: 2010-6-14 04:42
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;; r! v% U- t, @3 J- T1 w
case 2: return getitemtype(item) == 3;
1 Y4 }4 l  p. M& J" F! E8 y5 _: x% w! F- _1 K1 [1 v1 Y: h6 [: ?
就可以实现
作者: wj109260758    时间: 2010-6-14 05:15
case 2: return getitemtype(item) == 2||3;' n8 o0 _! M" N( R7 q. u0 n1 H
等于 case 2: return 2||3;) ~6 `9 I% j& b' [! F8 `
等于: return 1;
3 d+ G6 Q% m  a- r! H+ G$ p' t& a8 C' E你的第一个程序相当于:/ r+ m0 V% x1 V, T! C1 w
case 1: return getitemtype(item) == 1; 2 d( P6 @: J/ J  v8 i+ _. N1 {8 }
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!' T1 P" R1 {$ ?$ a; P; j. f' n5 U

' Q( S) c$ Y# w) ]+ `所以第二个你的程序可以解读为:
0 J$ S* @# z4 M1 W* C6 c  h% }switch(port)( n  Z* C( ^; p) g7 z9 ]
{
/ d- {$ ]  a/ [) m$ lcase 1: return 1;(相当于所有实体可以从出口1流出). h6 {8 C1 J! {4 M1 q
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出): U7 v& i2 G% ^8 K, Q/ P
}0 t4 {( ~& t/ H3 {  e; t7 e
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。1 ^7 x  `# o2 F: ?+ X. z% ^
+ F+ _  m8 ]! r! P
如有错误,请指教。
作者: domcylai    时间: 2012-2-6 16:14
case 2: return getitemtype(item) == 2||3;: c  g- [9 u! T
等于 case 2: return 2||3;
; @. ], c3 P, f! f等于: return 1;9 L4 w, `1 E7 y! `
你的第一个程序相当于:
3 e5 B3 ~5 o; g- ~; ?$ H& D' ?case 1: return getitemtype(item) == 1; * ]9 n7 o& E, T; j6 u
case 2: return 1;在Megesort中最后一个出口,可 ...3 m' A9 [! b) j3 ~* ]4 K. m: u
wj109260758 发表于 2010-6-14 05:15
# E! C( m/ j4 P! S2 o2 t

1 g3 O0 o" d3 ?8 b% J' S+ n. q理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
! {/ d4 {5 E7 o7 Freturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
+ E6 U# B& e) h, x2 ?4 {; U7 S+ w5 O& T0 N' H) o! ~  k
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
作者: vivion    时间: 2012-3-30 11:19
感觉还是没有看懂到底为什么会出现这种情况?




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3