全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
& A$ l; U: q. @% d5 t  k; |, g{
/ O8 m" z: X5 k' xcase 1: return getitemtype(item) == 1; break;
4 `0 U% n5 \# Bcase 2: return getitemtype(item) == 2||3;break;
  }/ J" E3 l8 _0 l' g  p" `6 K}- J& a  A( G  p) e
结果成功了。但是,. W6 S( l4 X7 l+ b. W. \
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
' x. L- u, u8 S! nswitch(port)' E1 K9 G. T- k( y% g" M
{& T; ?- {: T1 ^4 J- L$ V1 {
case 1: return getitemtype(item) == 1||2; break;
' A- ]" j$ A. u. |0 N& Icase 2: return getitemtype(item) == 3;break;! e" @* s+ X5 s* j
}
( M' M6 m9 V6 a% T* f- r产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
; v  e$ b' Z1 o' N* u* K9 A. 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;
7 k' q6 B8 y, _% pcase 2: return getitemtype(item) == 3;$ V( L$ W; d2 T" P

2 S  L5 w, Q4 T! ]3 O5 {6 q) A就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
' A* `% V" y2 a( D8 q! c4 |' x等于 case 2: return 2||3;
; R9 J2 u4 y+ M- X$ j$ L等于: return 1;: k4 S/ y/ v/ }
你的第一个程序相当于:
4 @3 e$ I+ x  Z9 K9 ?7 ^5 a( v- u9 ?case 1: return getitemtype(item) == 1;
4 r4 q+ O6 [# O1 D0 ^% Dcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!" V& {8 N/ v! Y6 z; f1 ]
! C2 m' c& f5 m* E. X! C
所以第二个你的程序可以解读为:
$ u' R( f; U" k# kswitch(port)
9 ~& g9 s1 Y# V: \) d# L{
& W  @, ?0 p0 {0 _- H9 }* ?2 |& W' mcase 1: return 1;(相当于所有实体可以从出口1流出): g" O3 {3 E4 k% V1 }* P6 n
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)+ ?1 m: E& X6 z0 M2 f& j
}
  q/ N& _/ E2 Z4 _% x5 j由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。6 j& [; G$ b& I8 Q( |  x
3 x! b' x7 v; g6 y/ o
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
) S! N% l* P& J' L! S% u( p等于 case 2: return 2||3;
7 D+ T# L" O! z- s等于: return 1;& {" D" A7 g1 {# o0 j7 T
你的第一个程序相当于:+ I3 t0 d0 ?4 l/ H$ k0 c1 p# u
case 1: return getitemtype(item) == 1; $ b; E- W, q6 R3 b
case 2: return 1;在Megesort中最后一个出口,可 ...
5 {2 W, |- E! Z, rwj109260758 发表于 2010-6-14 05:15

& F* T) y, i8 t9 t9 \% j
5 z3 L6 Y0 l0 w0 q4 M! A4 c. G( V理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
1 N+ C2 @4 [1 O7 g( w% Lreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真! {7 a4 B5 `! V6 n% H$ ~

) |4 ?, C/ ]7 P" J3 F: c6 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-9-1 16:53 , Processed in 0.065255 second(s), 14 queries .

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

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