java中的Fortran GOTOs

java中的Fortran GOTOs,java,fortran,goto,Java,Fortran,Goto,是的,我研究了在java中实现GOTO的各种方法,但现实情况如下: 我需要一个最新的fortran LAPACK例程转换成java, 看见 e、 g: 什么是处理所有可能的GoTo的“标准”方法?GoTo被认为是一种反模式。在不考虑重新设计代码的情况下,决不能尝试将其直接转换为Java 例如,当您看到GOTO的标签时,这可能是该代码将被重用的标志。它应该属于将来再次调用的方法吗?使用面向对象而不是使用与FORTRAN中相同的过程序列来处理新设计 Java在没有GOTOs的现实世界中确实可以工作。

是的,我研究了在java中实现GOTO的各种方法,但现实情况如下: 我需要一个最新的fortran LAPACK例程转换成java, 看见 e、 g:


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

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

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


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

处理此问题的最佳方法是将每个逻辑块组成一个部分,并为整个函数制作一个状态图

不要忘记,从一个状态的开始到结束都被认为是一种过渡,应该这样对待。当您将这些函数分解为它们的状态转换时,您可以开始看到它们可以简化为几个函数,在必要时应用递归或迭代

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


请注意,某些状态转换上填充的方框表示,如果没有其他转换离开该状态,则保证选择该转换。注意,它在80上不存在,因为我无法确定80或90是它的保证目的地。有可能有什么东西会永远绕着80转?如果不进一步理解函数,我就不能说了。

很抱歉,尽管我很想同意你的看法,但是用FORTRAN编写的东西很难翻译。其中很多都是在研究资助或国防合同上写的,而且都没有时间或资金来重新写一些已经有效的东西。对于许多社区来说,这是不可行的。@glow:另一个选择是根本不重新编写代码,而是创建一个接口,以允许Java和Fortran代码一起工作。这可以像使用流或其他消息传递一样简单。@glowcoder-True。将一个功能齐全的系统转换成另一种语言,并保证它以完全相同的方式继续工作,需要花费大量的时间和金钱。对于许多社区或公司来说,这样做是不可行的。如果成功的话,那么升级的原因真的值得花点时间换成另一种语言吗?@HovercraftFullOfEels绝对同意。我同意这一评论。不要试图“转换”代码。找出它在做什么,并使用OOD/OOP重写它。感谢大家的尝试,但是。。。在这个阶段,用java编写科学代码太难了。现在,我回到普通的fortran-95。
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