我想将我的算法从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>}
。没有
\State
与algorithm2e
。
答案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}
不过,我不确定,因为你正在尝试使用三个不同的算法包。我建议你选择一个,并且只包含这一个。