全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
0 Q/ r! M  G, T) v4 u{
0 r5 C4 m9 c/ D7 |case 1: return getitemtype(item) == 1; break;. m, [+ ]6 x, v
case 2: return getitemtype(item) == 2||3;break;
4 r% i$ @7 I. L" _' k}8 L1 p" A! o' I* _" T* u4 K2 i  F% H
结果成功了。但是,
7 m5 z5 ]2 N, i9 S如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
5 X# P4 G5 J1 y. t  rswitch(port)
% C; W* }9 D' ~{8 {. y4 |# @' g% d8 a2 c  j& _9 Z4 s
case 1: return getitemtype(item) == 1||2; break;" V& K7 x- M6 K$ t/ a  `+ W- ~* N! c
case 2: return getitemtype(item) == 3;break;4 u( k' U0 c7 P* e
}
5 {, f7 D8 O" Y9 Q9 [0 d产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?; o& Y, D9 O5 t- ]- b
有谁有关于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 A+ n" H8 H3 h1 h
case 2: return getitemtype(item) == 3;
2 I/ v. e: e8 v& S- \9 A
1 Z$ n8 m4 ~' y! S4 S7 h& ?就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;3 p+ O6 Z- h! J7 _/ m
等于 case 2: return 2||3;, D8 F! N* ~% z) f
等于: return 1;. m$ l3 ?4 A5 n  Q% h
你的第一个程序相当于:
. W4 k; j! r! d4 K3 A2 Tcase 1: return getitemtype(item) == 1;
0 k# ]5 W# Y; m/ _( |, ~case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
# x0 J5 y! n1 w
5 w3 @% b5 E: F* o# Q# q) J+ o  g所以第二个你的程序可以解读为:
1 V. ]/ u4 e3 kswitch(port)' M. @9 V0 ^5 B! y$ E6 n
{2 x* T( d9 S( P: c, V
case 1: return 1;(相当于所有实体可以从出口1流出)8 \- V; A& |* H0 l  b( O" i
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
! a9 M; a* d; n: ~}7 T4 X. s4 \# q: {+ ?
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。( O2 _$ z6 F6 L! k; ~& c  }, C& i* I+ s$ N
: X/ K; q" A" B) N  M
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;6 J& F3 i" g: {4 z" a' E
等于 case 2: return 2||3;
6 c) |$ b' O3 N, V+ Q4 i等于: return 1;5 L) K3 M( J) @' x, }( e
你的第一个程序相当于:# H9 L# l( O  R5 h% z8 C
case 1: return getitemtype(item) == 1; 4 {7 t1 e$ b  `( I, ^9 Z
case 2: return 1;在Megesort中最后一个出口,可 ...
6 j5 X3 u6 D9 T* Pwj109260758 发表于 2010-6-14 05:15

6 Q  h! I9 `! A+ g
# c% a6 W1 Z# Z/ I0 r8 w理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
9 F6 F7 S( i. O. W+ X) vreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
: u1 Q# `8 z5 p4 h. o5 l1 s4 U1 S' Z9 S! p+ C
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-6 01:36 , Processed in 0.069672 second(s), 14 queries .

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

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