全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
) x; L+ {: `3 j{1 z$ Y0 k8 j- t3 u# g+ n
case 1: return getitemtype(item) == 1; break;( H5 D4 v6 n; E4 f9 V4 U* T
case 2: return getitemtype(item) == 2||3;break;
% R: W# t0 k/ Z% ]$ s}
6 }4 J; |! J. J8 \结果成功了。但是,
0 ^9 d1 N& M5 b( {8 _/ L1 x( F1 d如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:4 l4 J, G6 r& R( u
switch(port)- [1 ^+ Z! L$ `5 H& r8 m
{  V! ]: q" l  S. o- ^/ E5 y% i7 x
case 1: return getitemtype(item) == 1||2; break;! a4 h. N6 L/ _/ Z. ?  ]( A4 t6 `
case 2: return getitemtype(item) == 3;break;
6 d( ?& B2 e! F6 @5 {' H& d! z}4 p$ K+ {1 C0 }( c, l
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?# O6 N1 _" S9 e/ B/ c5 Q
有谁有关于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 q# o! j. x+ B5 A8 [case 2: return getitemtype(item) == 3;
, C+ y& G8 b2 m% A5 {; L" l
, N1 S. U# Z' V1 z- a) [就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;1 R# M/ A8 Y' U; Z1 d  V
等于 case 2: return 2||3;
2 r' l' D7 w4 I3 h' S等于: return 1;+ s/ s+ }, D3 [/ z4 u
你的第一个程序相当于:  Q1 h" Z3 ~9 o& g0 T
case 1: return getitemtype(item) == 1; 1 }$ I5 u2 r# X8 S1 ]$ p5 M
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!" k4 B( Q% r. c7 q% I  G. C' d1 R

+ n/ n5 k, p2 }+ {2 d: G/ E, ~$ y% y所以第二个你的程序可以解读为:
# t6 [" M' W4 X" E0 u# k- _6 fswitch(port)
( M, D' B' m! F3 F{; [1 L7 t1 b; L7 C5 {' v* h" R; [! |
case 1: return 1;(相当于所有实体可以从出口1流出)( K/ B/ b5 f6 P. l& r/ x
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
# a' Q, {4 F% a8 K6 P}" e7 T4 |% C" k
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
' L% m/ j' v" H4 v" h
& f+ l2 f: h& T% D5 r! q如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;  n+ g( z& \+ [! B
等于 case 2: return 2||3;4 R3 y) }: t5 T( G
等于: return 1;6 L' o8 Z% o1 E5 j$ r  c3 b
你的第一个程序相当于:; h2 `/ F2 W1 S' i/ @
case 1: return getitemtype(item) == 1; " g' f* E7 ]1 f- X9 {# F1 G: N
case 2: return 1;在Megesort中最后一个出口,可 ...
+ c- `! L6 v, W: R3 iwj109260758 发表于 2010-6-14 05:15
( {  y2 ]" C) i  t5 r4 Y
6 W5 }7 L( a' P2 n1 _3 i3 N
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。$ K0 Y" \0 l" j+ O
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
+ ~( I) g" }; n. P7 o6 {
/ `2 ]1 n5 V. c  K1 c' l这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-31 14:12 , Processed in 0.083750 second(s), 14 queries .

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

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