コードを修正する必要がありますか?
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
この記事には情報が不足し、これが私にとって奇妙で魅力的な挑戦となりました。まず、ロボット翻訳者は言語がマレー語であると言いました。同じことだと推測しました。空にできないか、制限ループがゼロより大きくなければなりません。
したがって、コードは入力値を要求し、値が空ではなくゼロ以上であることを確認し、実行すると無限に繰り返され、端末にゼロを送信します。エンコーダの最終目標が何であるかよくわからないので、正しい方法で「固定」したかどうかはわかりませんが、「let i = i + 1;」行を「else」ステートメントから移動するだけです。 、無限ループの代わりに入力のループ限界まで0からカウントして出力します。また、途中で出会う偶数と奇数の数も計算します。コードはそのままこれらの数に対して何もしません。たぶん、より大きなコードスニペットです。たぶん、誰かが楽しさのために実験しながら書いたおもちゃプログラムかもしれません。とにかく、偶数と奇数を出力する行が追加された「翻訳された」バージョンは次のとおりです。
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