全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:* I: y, E# l8 P. B3 o: q4 v
{9 o' _6 D' B) }" n" G7 ~6 o) v
case 1: return getitemtype(item) == 1; break;. U. @  m6 |( A) z) l
case 2: return getitemtype(item) == 2||3;break;
$ ]" K. h. f. R}) y( W+ H3 L# n: b" t' Y, W
结果成功了。但是,
# W8 I* j9 P) E+ u/ ]1 H如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:. F" S; @5 K' H( K/ ~. C
switch(port)
( l/ h5 t/ j' L$ m8 Z{% A* {7 j+ U, t1 j5 v  \" }
case 1: return getitemtype(item) == 1||2; break;/ B7 U9 z7 w. T
case 2: return getitemtype(item) == 3;break;
0 D+ j3 y. {5 j/ `' t}6 J' ^* C$ M! f% _; S) k4 ^
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
" d6 m3 e4 i( ]  q- A有谁有关于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;, d3 M9 |# M& A- G/ p
case 2: return getitemtype(item) == 3;
0 {0 n  _9 w/ o* Q+ w. L
1 F8 P2 f- H2 u' ?; C! U: L就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
5 J$ l! m% N8 ^& Y& K8 i等于 case 2: return 2||3;
2 C  I1 u. ~" f" O7 u等于: return 1;3 m4 t7 o& y7 V5 y2 Y
你的第一个程序相当于:# p$ [) ~! Y9 X8 h+ B
case 1: return getitemtype(item) == 1;
. I2 u, `0 z" g! b& |  d9 H* [case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
4 ~0 @: g, U0 @4 C" r, I# `! _; w5 U* }/ G6 |& v% q8 |! [# P5 i
所以第二个你的程序可以解读为:. E9 l' O! q. I- h5 S* b
switch(port)
# w* D% c/ [$ Q( H- }6 M& Y{
( P9 z3 ]! F1 T! jcase 1: return 1;(相当于所有实体可以从出口1流出)3 A8 G9 O5 b8 i) M
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)' Y0 O. B* P4 `- M# D$ h
}# z# c: V! G  O& K7 y
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。, g  q2 y+ ~/ f$ ~5 l1 B
' F) L( K/ s+ W  {4 t: H/ S/ ^
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;2 k4 f1 |( p4 H# v# ~
等于 case 2: return 2||3;
# L8 T( [2 C# X6 [" E0 L等于: return 1;
2 h8 N# A0 Q! b" }' z你的第一个程序相当于:! e* v7 ]2 F1 c# i
case 1: return getitemtype(item) == 1;
4 h7 Y' |, c- b' M/ u9 d8 mcase 2: return 1;在Megesort中最后一个出口,可 ...1 e1 V9 l1 \4 g% E& r2 p1 p& A
wj109260758 发表于 2010-6-14 05:15
# }" N# r+ N+ V( V: F# j$ i
8 d' U/ n5 L: f' Q. a2 \" f
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。- {5 C) O  z! g/ r2 Z0 M- h" V
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真, ?$ ]% Z- k4 q3 Y. ~0 E
* B6 q" ]* U8 i0 |- H5 b8 f
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-18 03:29 , Processed in 0.074227 second(s), 13 queries .

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

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