全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
; f% ?8 p% B+ a; O{7 L6 I9 u+ |$ Q. |# t6 q( _
case 1: return getitemtype(item) == 1; break;0 B( o. w) u. S# c* a& k
case 2: return getitemtype(item) == 2||3;break;4 o0 P% B# ]" C% w& p4 c4 v
}: E# T7 x" e* p! o3 v
结果成功了。但是,
) C6 l: ]; ?: y  i! ^+ E如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:7 ]# _  ^# e9 R) Z2 A: d3 b
switch(port)
. b+ }" u8 A8 F% E3 I4 A{+ e+ _* P5 Z  x: z' j' `- d
case 1: return getitemtype(item) == 1||2; break;
$ ]. q; K6 d) Z( ]+ L: ^1 ncase 2: return getitemtype(item) == 3;break;
6 d+ e- k  J( R- A) ~}
- a/ y, ?/ X: [  q- B* |7 {$ J% ]产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
; k6 Q: X9 N4 @8 g3 J3 D1 l有谁有关于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;: ~# s' @; H# q6 k
case 2: return getitemtype(item) == 3;
: ]) c) |( K$ n
6 @: `& T, K0 p就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;3 V# G- ~3 F2 g
等于 case 2: return 2||3;6 u0 j, e  I* S' P8 t# ]
等于: return 1;
; p9 W9 M$ |5 G0 o: k5 `; X你的第一个程序相当于:
( V; m! g+ E& b% N3 b$ gcase 1: return getitemtype(item) == 1;
  ?0 w1 \$ S  q6 I8 V0 S# vcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!! h5 O. J! x& i
" g) E/ U7 N. @
所以第二个你的程序可以解读为:
* J" ~3 m# d; ?: Aswitch(port)
+ Z+ d! }4 `% _# t/ y. K{' ~1 Y. D/ {' Z' s* r: W$ g
case 1: return 1;(相当于所有实体可以从出口1流出)$ j  {/ @3 P% ]3 N2 J0 B6 A5 z
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
# o# W% A% z$ \. Z8 x$ w}! M& o- r. l) q) {
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。, T! U; z0 u9 O+ E6 i
1 s0 j7 R9 v* R, c- y( i6 s
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;/ Q* g& Y: @+ t% j' c6 Z
等于 case 2: return 2||3;
* M  x$ f. _: n等于: return 1;
" h7 t6 Z% ~1 _7 a- z# b% p你的第一个程序相当于:3 B$ Y+ k0 K" U% a! D, C
case 1: return getitemtype(item) == 1;
9 h/ j3 j; i* N. s: o! t  p7 |case 2: return 1;在Megesort中最后一个出口,可 ...8 }- i! v% K) {. [
wj109260758 发表于 2010-6-14 05:15
9 g2 q- p& B0 x; U4 G4 Z8 ?

$ J4 P2 K* k9 _& s理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
4 A5 |) I- Y, ~7 n8 `' @return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
4 i" H0 @! A- A# D  A/ O$ x" t
6 s, }* m$ g" g; H# {% Z" w这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-6-15 04:16 , Processed in 0.069584 second(s), 13 queries .

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

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