全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:. N& u$ M+ U8 o( c
{( \3 M7 B; l& E# c; r3 |
case 1: return getitemtype(item) == 1; break;
: N* P4 k7 ~  }% B) l, i; mcase 2: return getitemtype(item) == 2||3;break;  L) h% Z6 G4 t
}
. f2 W/ g( g2 H& k; u) s9 ~结果成功了。但是,
( I+ Z+ F0 y6 R/ T3 n* g- K如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
: R4 K  x+ y4 W$ i& C% w* oswitch(port)- Q0 r& x' U+ Z* K
{; r9 x0 A' K9 f6 {5 v  [3 P" q
case 1: return getitemtype(item) == 1||2; break;( Q5 y# [' k' m0 k+ b8 ?1 }- N
case 2: return getitemtype(item) == 3;break;
' _6 ~* C3 P! V7 D) d7 r  M7 @}0 d$ g2 t/ y% [0 u% b6 W) Y1 J8 W
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?9 |( @- A8 c; s) N
有谁有关于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;
( r% _; {4 k( n" I# |" zcase 2: return getitemtype(item) == 3;
% T; {& F4 Y% W1 j9 `- z  c' r" T3 M" d* [
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;8 C, D2 z) ]; f7 B( P2 \) j
等于 case 2: return 2||3;' a" e# i7 V5 K# v, X+ K
等于: return 1;" I* d+ ^4 Z5 U/ B; }* Q1 A2 a2 f# n2 R
你的第一个程序相当于:
: b9 ^) _4 t) acase 1: return getitemtype(item) == 1;
' T/ s" d  P/ g! F* Vcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!" w# y- q8 g" \/ w( c/ O" a

5 N( h# w, o7 O: s; {. [# K7 B所以第二个你的程序可以解读为:
: _# X+ c! Z& [: _switch(port)
9 y- s3 b: z1 C9 }{! V' _% o& W/ a2 G5 q
case 1: return 1;(相当于所有实体可以从出口1流出)
! ~+ s/ `8 g8 I: l9 |. T1 y- zcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)( N. ~+ ]1 ^- m
}; l$ j9 j! b$ d, f
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。3 u2 r0 r6 ~7 Y3 F& `4 U5 x; J

5 V) O' A1 N+ b5 L8 r' X8 |如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
) r$ m" s  m- i7 |等于 case 2: return 2||3;
* U7 G' r1 j' y' Z等于: return 1;8 \/ {5 M. o5 T( K% u
你的第一个程序相当于:
+ L7 f$ I1 z" A% Z3 R* ycase 1: return getitemtype(item) == 1;
& k/ m1 W% i: Ccase 2: return 1;在Megesort中最后一个出口,可 ...% w3 F/ N1 ^; G8 P& [1 {
wj109260758 发表于 2010-6-14 05:15
% P6 V- x+ i4 q( Q
0 ^9 U4 |. e/ X! L* i$ E! r
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。4 \7 o: l8 Q) l6 }8 V
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
3 d* @' Y' |! d4 T6 ?
: P& F5 \: y/ V; o+ b4 Z/ i这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-28 20:17 , Processed in 0.062366 second(s), 13 queries .

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

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