全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
+ `* X+ n9 w$ j* a5 [- P{. A: T; t/ y+ _$ z& }0 M
case 1: return getitemtype(item) == 1; break;
$ ^- D, _" S& }, I# e' C, m2 z4 L. Gcase 2: return getitemtype(item) == 2||3;break;' C: |3 L( V8 V  H
}
% }. U* M0 P4 M- q结果成功了。但是,, _& f5 n/ ~+ F: z5 Q2 N- g1 ~
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:/ y& s6 X0 [8 F
switch(port)+ [/ q- F) O8 A, k; d$ i; j
{
  V0 V% j- ?* I( [/ o2 Hcase 1: return getitemtype(item) == 1||2; break;( n9 @6 q/ w3 q' S* e
case 2: return getitemtype(item) == 3;break;1 A2 m7 M2 n$ M1 z* {# ^
}+ ~3 g% R2 V" k: D% e0 x4 r* w
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
9 w* f$ {6 g' x8 ]6 Z- j$ e$ T有谁有关于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;
7 b! [% |( c2 T- _case 2: return getitemtype(item) == 3;" [" y4 M& z- L" f3 E/ x
4 h& {3 a4 i+ s" H
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;# l) B( `: b( c" S' u4 Z+ H. o% D
等于 case 2: return 2||3;
# C; H$ R) ]$ G9 c6 [7 O等于: return 1;! ^$ M; c4 g6 [% X) ^# I3 \; \
你的第一个程序相当于:
+ Y) M6 ?) M" w; X( p  mcase 1: return getitemtype(item) == 1; , {4 _4 Z/ Z1 X
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!& F- z9 {6 c5 i: r) y

: D% r" Z( p! `+ r& _6 }所以第二个你的程序可以解读为:
7 U$ a' j5 N1 mswitch(port)
+ O, c6 g2 C! A$ r% S# C{
5 O4 c/ Y) d" `case 1: return 1;(相当于所有实体可以从出口1流出)
2 y/ C4 O/ H' \2 I! `* gcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
3 y4 n" e2 U: u}
. Z- O( z4 T, w4 o9 T2 p由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
* M* ?7 f& m  x! O+ \3 [
9 X) X3 \0 W% \7 A如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;* I( ]1 C" @7 z
等于 case 2: return 2||3;
: ~8 o% ~" G/ ^3 a0 {( O2 T. @2 a等于: return 1;
' C. ]% H9 ]) O你的第一个程序相当于:
1 T" _) y. S7 Z7 G, W% Y. G/ Ucase 1: return getitemtype(item) == 1;
% o2 @/ D, V( W7 h( ]- }case 2: return 1;在Megesort中最后一个出口,可 ...# N1 Y: w- u5 a& N7 m
wj109260758 发表于 2010-6-14 05:15
) }. G) M+ A' W, u5 f: q2 ]  N
3 Y' Y+ i9 a* U* n0 H
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
& S9 y( Z& d  ~& f! ~- ~return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真+ s) b# L* m" v. ~$ h1 R0 f3 f2 h

- F- H) m- n+ T! K8 G% n" f) {- M这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-8 01:33 , Processed in 0.088441 second(s), 13 queries .

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

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