全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:8 `) ~2 D% |+ \3 j3 r$ a
{- x( y- V* [% {; I9 h0 k
case 1: return getitemtype(item) == 1; break;
* X  Q6 i5 G: k" w( vcase 2: return getitemtype(item) == 2||3;break;0 \( y/ P1 _' `8 w% s
}
' Q' u$ j+ }# K4 F% Y4 k: j结果成功了。但是,
0 s( v( o# v/ w  e  ?$ j' U如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
4 S6 a6 o1 I1 p, ]# O# Bswitch(port)0 B& ^' \0 T: J/ ]' c7 [1 D
{' A, I* O  r6 v* E) C: I  h7 Z
case 1: return getitemtype(item) == 1||2; break;* j' D- X5 R! V( y: l: }; N+ y0 l
case 2: return getitemtype(item) == 3;break;
. Y# W3 C/ ~8 f- F0 I}
# g3 F# o% L0 H$ Q7 q产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?  W) ?& u0 i) \
有谁有关于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;5 U5 d9 F  }; R& Z/ {, s' B
case 2: return getitemtype(item) == 3;
0 j9 h* G2 ?3 C5 L/ q) t
' x  E* |0 X  V& n就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;1 t9 X: H# W# V' m* O% w0 m
等于 case 2: return 2||3;& k$ O. Q) K0 g: Z
等于: return 1;& }* X: G; U# J. b9 P- D
你的第一个程序相当于:
. _* d+ T. I- T. l' J/ dcase 1: return getitemtype(item) == 1;
7 f% U7 ~" W7 L$ U% Q8 b8 Hcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
, R  A: h3 \/ k- S* A  ?( V
+ w' k" v, E5 s' l+ M7 w1 Y% [$ e所以第二个你的程序可以解读为:$ P$ P& L0 L9 G' \
switch(port); \' ]% ~2 Z  b: K
{
; O7 {' I9 {! h( E" C/ T% A8 y  M3 N9 ?case 1: return 1;(相当于所有实体可以从出口1流出)
; z. X8 S) i% Q$ ~! A' @case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
  `& i: p# o0 ~, E2 Z! f( ?+ Y' h}
# \7 y% F! p. d  D4 g- [1 a由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。8 X. z# ~# c4 o; m! k
( _$ B9 X) Z& n
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
! d; E3 O$ L5 W/ I7 r9 ?- o& G3 Y等于 case 2: return 2||3;
4 H% P5 F, {* u5 _等于: return 1;  |/ t/ l3 F! ?" k
你的第一个程序相当于:4 D" c; F5 I6 X0 T5 ^: k% u3 N/ A" |" e
case 1: return getitemtype(item) == 1;
9 k3 o$ m* e: `6 Xcase 2: return 1;在Megesort中最后一个出口,可 ...
& B- I1 I1 X# t, |$ N6 W# nwj109260758 发表于 2010-6-14 05:15

8 D3 z7 L0 X4 `1 c% k
. p; t5 ]0 C7 Y: d4 n" c# I' A理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
9 u0 R- z, M) \return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真' R: }2 V( L* p0 _) n- ~& C- u  Q- s
. A* B( ^) o8 K3 `0 l; |3 ]6 R$ V
这种写法是不正确的,而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-1 07:12 , Processed in 0.084617 second(s), 13 queries .

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

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