全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
% B4 f1 T6 V: L! O# t{2 {! O+ Q: M% k( g) u& x$ _  k
case 1: return getitemtype(item) == 1; break;+ _$ W* ~# N1 {- ]
case 2: return getitemtype(item) == 2||3;break;
6 U* a9 N9 J: \. f) O}
6 K6 H# t2 _# ?: N结果成功了。但是,
' E7 V) x8 g4 e% j6 g; {7 L如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
0 h# p7 B' }/ Z+ m6 oswitch(port)
. L( G; V- d% Z' F{: m) c9 e. `* m+ T
case 1: return getitemtype(item) == 1||2; break;# ], P! [& r; |9 q( Y; z
case 2: return getitemtype(item) == 3;break;. @. t% X% U) e
}
* M9 y& A6 ]! w0 L产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?7 k5 \  t. K  Z4 ^# y
有谁有关于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;
! b( A4 d8 F' I! q" Z4 Z: wcase 2: return getitemtype(item) == 3;
' a, S* Q: ~3 Y9 R& ~* c) ?' B% z4 q9 x
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
6 n. u) e( ^9 i: T% W$ f等于 case 2: return 2||3;; ]6 p4 E1 J) D5 |- Z7 r
等于: return 1;
: u7 }; S, ~( i你的第一个程序相当于:
6 \9 G/ M0 A* p2 l6 Vcase 1: return getitemtype(item) == 1; $ }# Q) N$ \2 E, B) Z; Q5 q
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
4 m1 D) |; |2 _
1 z1 u1 v! D. X& x$ |所以第二个你的程序可以解读为:& d5 E9 T4 H7 ~: W  F8 O6 q4 f
switch(port)
. `. m4 p; |7 O; \) w{& E' W* @; S4 c+ s! U
case 1: return 1;(相当于所有实体可以从出口1流出)* H) n8 W+ T1 D8 C5 \
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
/ a8 J' O2 c/ M}
' g0 h! a( v9 t' \! v3 L由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
5 L/ U  L  B% S# a  s) i7 y7 r$ H" F! {) W* J
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;. a$ M1 b& K8 b; S  m* w" e
等于 case 2: return 2||3;. [  D  Y$ o( L& b! O
等于: return 1;
4 w! W( C8 v7 T你的第一个程序相当于:3 @4 u8 c* {0 D$ o$ S% I- Q
case 1: return getitemtype(item) == 1; * U* h' D" k" }  S# s2 _6 R) H/ k
case 2: return 1;在Megesort中最后一个出口,可 ...0 W6 x  \  [4 M) ?4 s
wj109260758 发表于 2010-6-14 05:15
0 \5 y0 l, w" N- S. x- {

" B( V1 E% N; N% l理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
) [/ ^$ f- V; Z" c; ^1 T; z8 T! ]7 ~0 Xreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真# W& F  e3 a$ h' a/ Y  ?, n
9 L2 B  ]. D' x/ R* x/ z
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-1 21:22 , Processed in 0.066867 second(s), 13 queries .

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

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