Java中的Fortran GOTO

Dmi*_*lov 4 java fortran goto

是的,我看着在Java中实现GOTO的各种方式,但这里是真正的世界:我需要转换为Java的最新FORTRAN LAPACK程序的一个,看到 http://www.netlib.org/lapack/timing/eig/ eigsrc/dlasq3.f 例如:

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
Run Code Online (Sandbox Code Playgroud)

什么是处理所有可能的GOTO的"标准"方式?

cor*_*iKa 6

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

不要忘记,经过一个州开始的堕落被认为是一种过渡,应该这样对待.当你将它们分解为状态转换时,你可以开始看到它们可以被简化为少数几个函数,在必要时应用递归或迭代.

现在,我完全承认我不理解这个功能或它正在做什么或应该做什么,但这是制作状态图的第一次尝试,让你知道我的意思.注意循环开启80,可能需要一个循环.请注意,10和100是您唯一的返回状态.请注意,一旦你从30岁到50岁,就不会再回头了.这向我表明50+可能是它自己的孤立函数,而10-40是它自己的函数,有一个循环,当它达到30时说return functionRepresenting50Pluss(...)

http://i51.tinypic.com/otkbqr.png

只是注意,在某些状态转换上填充的正方形表示如果没有其他转换远离状态,则保证选择此转换.注意它在80上不存在,因为我无法确定80或90是否是它的保证目的地.它可能永远在80左右循环?如果不理解这个功能,我就不能说了.