全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
# R! n0 l  H$ E# r6 Y{, ], x, P+ ^6 L  F
case 1: return getitemtype(item) == 1; break;# p. d2 j5 I2 K5 f! x
case 2: return getitemtype(item) == 2||3;break;
9 L/ Y& O0 U7 E; h8 g2 }5 y}1 G% V! P/ s' E, F4 P/ u* w
结果成功了。但是,5 u1 x. o, X& h- ?2 g; {$ K- N
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:6 g7 O& G" E0 ~: |, x- y
switch(port)  `0 p) V4 {2 s9 a
{! N4 T/ @' P/ l3 R7 }) y1 `: @, \
case 1: return getitemtype(item) == 1||2; break;5 l8 v( k% Z  S( f
case 2: return getitemtype(item) == 3;break;# R6 A2 c6 w2 O' Q5 o' i3 }
}2 O; W# r7 I8 {2 D
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
. k. {) X6 f- u4 ~. k/ W7 E有谁有关于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;6 X, e2 D0 ~- L2 z, x
case 2: return getitemtype(item) == 3;
8 E3 u, A4 M6 R$ V
  s4 w6 U! x& I就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;6 [: G* ], X3 W
等于 case 2: return 2||3;
- c  Y: G( [' K; {3 f) m( c等于: return 1;
. k6 z% D- G6 A7 q% K/ {你的第一个程序相当于:
/ j1 {% v. T' `& ~+ B/ e, @case 1: return getitemtype(item) == 1; , f- F/ }2 @3 F. h, q2 b& F
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
% L8 K7 U7 g$ o# s( S" Q
) T; |( J6 C6 M7 p7 W所以第二个你的程序可以解读为:* N% O+ m: a1 I$ f' C# z
switch(port)! ^" {% u( ~; V9 x
{2 N7 T& B: `9 O) X  b1 h- ?
case 1: return 1;(相当于所有实体可以从出口1流出)
; k- b1 S, R8 H4 H3 d- [7 Icase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)/ Y! V" B1 A* d
}/ K( M( e4 a- V8 ?8 [# V: p
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
( y* @" I- b$ M- |+ @+ m* f" q# c4 G: @% U, M( h' ^
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;# ^; L; \% ?9 @, ]7 O
等于 case 2: return 2||3;
5 H8 ]+ D/ X: [+ R# {8 s等于: return 1;3 Y" }% `4 C( V- m/ t/ j9 t3 |8 i1 T
你的第一个程序相当于:2 r4 `! N5 S# I5 V$ Z3 Z3 g- }
case 1: return getitemtype(item) == 1; - x% h' N! g+ z8 G6 h/ V: X
case 2: return 1;在Megesort中最后一个出口,可 ...
) h2 U* S  p) F! h' f$ }wj109260758 发表于 2010-6-14 05:15

, @9 P( N' S  J' ]5 p
+ f1 ]* c1 a: t1 \理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
* ?% s) J$ N  [% |return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
0 H, v' h, z4 a7 w8 }! q$ R6 _& l. s/ L8 d+ J) |# [* `
这种写法是不正确的,而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 18:02 , Processed in 0.068195 second(s), 13 queries .

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

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