While 循环到 if 条件

While 循环到 if 条件

我想将我的算法从while循环改为 if 条件。除了语句之外,其他一切都一样while。在while循环中,将其改为r < R。我尝试了很多方法,但我的脚本失败了。

以下是我的原始脚本while

\documentclass[conference]{IEEEtran}
  \usepackage{algorithm}
\usepackage[algo2e]{algorithm2e}
\usepackage[]{algpseudocode}

 \begin{algorithm}
    \caption{Pseudo-code of Mine}
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}
    \Input{Info}
    \Output{SCORE}
            \While{$r < R$}{
            \State 
            \begin{varwidth}[t]{\linewidth} \par
                $n\gets function(DataX, Datax1, DataX2,$ \par
                \hskip\algorithmicindent $Type, Type2)$
            \end{varwidth}
            \State $S\gets function (S)$
            \EndWhile}


        \State $SCORE \gets Trained ANN(InfoInput)$ 
\end{algorithm}

在此处输入图片描述

我的尝试代码也是添加其他条件:

\begin{algorithm}
    \caption{Pseudo-code of Mine}
    \SetKwInOut{Input}{Input}
    \SetKwInOut{Output}{Output}
    \Input{Info}
    \Output{SCORE}
            \if{$r < R$}{
            \State 
            \begin{varwidth}[t]{\linewidth} \par
                $n\gets function(DataX, Datax1, DataX2,$ \par
                \hskip\algorithmicindent $Type, Type2)$
            \end{varwidth}
            \State $S\gets function (S)$
            \Endif}


        \State $SCORE \gets Trained ANN(InfoInput)$ 

        \Else

        {
            \State 
            \begin{varwidth}[t]{\linewidth} \par
                $n\gets function(DataX, Datax1, DataX2,$ \par
                \hskip\algorithmicindent $Type, Type2)$
            \end{varwidth}
            \State $S\gets function (S)$
            \Endif}


        \State $SCORE \gets Trained ANN(InfoInput)$ 

\end{algorithm}

答案1

你错误地使用了两个不同算法包的语法。似乎你偏爱algorithm2e对于一般结构,同时使用algorithmicx-type 语法用于其他一些组件。

下面我使用传统的algorithm2e语法为您提供您想要的布局:

在此处输入图片描述

\documentclass{article}

\usepackage[ruled]{algorithm2e}
\usepackage{amsmath}

\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\DontPrintSemicolon

\begin{document}

\begin{algorithm}
  \caption{Some algorithm caption}

  \Input{Info}
  \Output{SCORE}

  \If{$r < R$}{
    $n \gets \text{function}(\text{DataX}, \text{DataX1}, \text{DataX2}, \text{Type}, \text{Type2})$\;
    $S \gets \text{function}(S)$\;
  }
  $\text{SCORE} \gets \text{Trained ANN}(\text{InfoInput})$\;
\end{algorithm}

\end{document}

特别注意:

  • 使用 a\;来终止环境中输入行的结尾algorithm。除非您发出 ,否则它将默认打印分号\DontPrintSemicolon

  • 一个如果-语句具有语法\If{<cond>}{<then>},而如果别的-语句使用\eIf{<cond>}{<then>}{<else>}

  • 没有\Statealgorithm2e

答案2

我认为您需要使用\If而不是\if。我还认为, if else 语句的正确结构是\If{<condition>} <text> \Else <text> \Endif。您似乎有\If{<condition>}{<text> \Endif} \Else{<text> \Endif}

就像是:

\begin{algorithm}
\caption{Pseudo-code of Mine}
\SetKwInOut{Input}{Input}
\SetKwInOut{Output}{Output}
\Input{Info}
\Output{SCORE}
     \If{$r < R$}
        \State 
        \begin{varwidth}[t]{\linewidth} \par
            $n\gets function(DataX, Datax1, DataX2,$ \par
            \hskip\algorithmicindent $Type, Type2)$
        \end{varwidth}
        \State $S\gets function (S)$



    \State $SCORE \gets Trained ANN(InfoInput)$ 

    \Else


        \State 
        \begin{varwidth}[t]{\linewidth} \par
            $n\gets function(DataX, Datax1, DataX2,$ \par
            \hskip\algorithmicindent $Type, Type2)$
        \end{varwidth}
        \State $S\gets function (S)$
     \Endif


    \State $SCORE \gets Trained ANN(InfoInput)$ 

\end{algorithm}

不过,我不确定,因为你正在尝试使用三个不同的算法包。我建议你选择一个,并且只包含这一个。

相关内容