我需要修复我的代码吗?
i=0; bil_genap=0;
bil_ganjil=0;
echo -n "Batas loop : ";
read batas;
if [ -z $batas ] | [ $batas -lt 0 ]; then
echo "Ops, tidak boleh kosong atau Batas loop harus >= 0";
exit 0;
fi
while [ $i -le $batas ]; do
echo -n "$i,";
if [ `expr $i % 2` -eq 0 ]; then
let bil_genap=$bil_genap+1;
else
let bil_ganjil=$bil_ganjil+1;
let i=$i+1;
fi
done
答案1
除了小问题之外,你还应该划线:
if [ -z $batas ] | [ $batas -lt 0 ]; then
成为
if [ -z $batas ] || [ $batas -lt 0 ]; then
而不是这个:
if [ `expr $i % 2` -eq 0 ]; then
您可以使用
if (( $i % 2 == 0 )); then
答案2
这篇文章中信息的缺乏使得这对我来说成为一个奇怪的有吸引力的挑战。首先,机器人翻译告诉我该语言是马来语,并推测“batas”的意思是“限制”或“边界”,genap 的意思是“偶数”,ganjil 的意思是“奇数”,警告消息大致为“Ops” ,不能为空或限制循环必须 >= 0”。
因此,代码请求一个输入值,检查以确保该值不为空并且为零或更大,然后,当您运行它时,它会无限循环并向终端发送零。因为我不确定编码器的最终目标是什么,所以我不能确定我是否以正确的方式“修复”了它,而是通过移动“let i=i+1;”行在“else”语句之外,它不是无限循环,而是从零计数到输入的循环限制并输出计数。它还计算一路上遇到的偶数和奇数的数量。该代码按原样不对这些计数执行任何操作。也许它是一段较大代码的片段。也许这是一个玩具程序,是由某人为了好玩而进行实验而编写的。无论如何,这是一个“翻译”版本,添加了输出偶数和奇数计数的行:
i=0;
even_num=0;
odd_num=0;
echo -n "Limit of loop : ";
read loop_lim;
if [ -z $loop_lim ] | [ $loop_lim -lt 0 ]; then
echo "Ops, Limit of loop cannot be empty and must be >= 0";
exit 0;
fi
while [ $i -le $loop_lim ]; do
echo -n "$i,";
if [ `expr $i % 2` -eq 0 ]; then
let even_num=$even_num+1;
else
let odd_num=$odd_num+1;
fi
let i=$i+1;
done
echo
echo $even_num
echo $odd_num