全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:- O$ S$ c' i8 B9 v1 d) q3 M
{
& {5 x6 Q, Y' |case 1: return getitemtype(item) == 1; break;7 P/ O# K) G5 q' J  v
case 2: return getitemtype(item) == 2||3;break;. ?' k5 w5 `5 G9 k% T- H. k2 O
}8 Y2 f* O$ {  R) b% F
结果成功了。但是,5 ], i0 M' X3 v: r9 O
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
4 W% t& g6 v& }0 E+ s3 Oswitch(port)+ \9 O3 Y% V+ s1 q  a
{
8 C2 D+ x- C/ p5 T& _case 1: return getitemtype(item) == 1||2; break;
& o1 K/ p6 o" f2 ~1 `; [% j; vcase 2: return getitemtype(item) == 3;break;
" D' w# j- C3 u& j1 {; O}/ x$ ]* f% K$ {( Z# y
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?. d5 q# x- h+ f8 H9 N# e4 F
有谁有关于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;
) O! S3 X, I+ s4 ?/ E- n0 ^case 2: return getitemtype(item) == 3;* H/ Y  |2 A1 s' `" Y% j; _+ G; f
" [! P4 x# g  R" w7 F
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
0 u; r+ G# o" u' g1 W: A# s等于 case 2: return 2||3;$ ]( g$ X/ t- g7 e; b0 K+ n
等于: return 1;
+ G; W/ b2 a' i" g你的第一个程序相当于:% B0 g8 H! K  j6 K2 _* P
case 1: return getitemtype(item) == 1;
* R/ _8 g, w3 e! u* ecase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!( a  g6 G! w% ]  a; w
  P5 D+ ?  n+ j9 ?$ J9 J; D
所以第二个你的程序可以解读为:
, i. [8 H, N8 Z6 aswitch(port)4 S. Z, W% [. u9 @) |
{
/ k8 c+ x$ u. ~8 G8 W+ ycase 1: return 1;(相当于所有实体可以从出口1流出)% }" z- q" E* i9 s, ?
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)% [& q5 x# m( \
}: ^5 w6 M9 b! |: Z
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
5 u! H/ i: ~+ K8 u$ r% i: _0 }4 k  D
4 i$ j* A8 m3 i& E  C如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
! d9 w- f/ @! V3 S9 E等于 case 2: return 2||3;3 R+ l) k5 o; p
等于: return 1;
. O' Z% t( D* h你的第一个程序相当于:
( I! }  [# o, A$ Gcase 1: return getitemtype(item) == 1;
9 g( U- R! m* g! u7 ]0 P- h) Ncase 2: return 1;在Megesort中最后一个出口,可 ...
7 ~2 Y. Q$ R. [wj109260758 发表于 2010-6-14 05:15

% _1 ?6 _. @# n' i! L- h; M4 p
9 r+ A2 T" c7 L3 h1 }5 N理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。. r. f( e: `3 Y9 v; u7 R
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
( k  A: m' Z* {9 I
6 }. x- k& ]! K4 {3 A! X  J这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-17 17:14 , Processed in 0.057644 second(s), 13 queries .

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

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