首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的Fortran GOTOs

java中的Fortran GOTOs
EN

Stack Overflow用户
提问于 2011-10-21 07:59:10
回答 2查看 427关注 0票数 4

是的,我研究了在java中实现GOTO的各种方法,但这是现实世界:我需要一个最新的fortran LAPACK例程转换为java,请参阅http://www.netlib.org/lapack/timing/eig/eigsrc/dlasq3.f,例如:

代码语言:javascript
复制
10 CONTINUE
      IF( N0.LT.I0 )
     $   RETURN
      IF( N0.EQ.I0 )
     $   GO TO 20
      NN = 4*N0 + PP
      IF( N0.EQ.( I0+1 ) )
     $   GO TO 40
      OPS = OPS + DBLE( 3 )
      IF( Z( NN-5 ).GT.TOL2*( SIGMA+Z( NN-3 ) ) .AND.
     $    Z( NN-2*PP-4 ).GT.TOL2*Z( NN-7 ) )
     $   GO TO 30
   20 CONTINUE
      fortran code ...
      GO TO 10
   30 CONTINUE
      OPS = OPS + DBLE( 2 )
      IF( Z( NN-9 ).GT.TOL2*SIGMA .AND.
     $    Z( NN-2*PP-8 ).GT.TOL2*Z( NN-11 ) )
     $   GO TO 50
   40 CONTINUE
      fortran code ...
      GO TO 10
   50 CONTINUE

处理所有可能的GOTOs的“标准”方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 08:09:09

GOTOs被认为是一种反模式。在不考虑重新设计代码的情况下,永远不要尝试将其直接转换为Java。

例如,当您看到GOTO的标签时,这很可能是此代码将被重用的标志。它是否应该属于将来要再次调用的方法?使用OO而不是使用与FORTRAN相同的过程序列来处理新的设计。

在没有GOTOs的情况下,Java确实可以在现实世界中工作。

票数 3
EN

Stack Overflow用户

发布于 2011-10-21 08:13:12

处理这种情况的最好方法是将每个逻辑块组成一个部分,并为整个函数制作一个状态图。

不要忘记,没有通过一个状态的开始被认为是一种转换,应该这样对待。当您将它们分解为状态转换时,您可以开始查看在哪里可以将它们简化为少数几个函数,并在必要时应用递归或迭代。

现在,我完全承认我不理解这个函数,或者它在做什么,或者它应该做什么,但这是第一次尝试制作状态图,让你对我的意思有一个概念。注意80上的循环,可能需要一个循环。请注意,10和100是唯一的返回状态。注意,一旦你从30岁到50岁,就没有回头路了。这向我表明,50+可能是它自己的独立函数,而10-40是它自己的函数,当它达到30时表示return functionRepresenting50Pluss(...)

只需注意,某些状态转换上填充的方框表明,如果没有其他转换远离该状态,则保证选择此转换。请注意,它不存在于80上,因为我不能真正确定80或90是它保证的目的地。有没有可能某个东西永远在80左右循环?如果对函数没有更多的了解,我就不能说了。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7843649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档