(max = 0とmin = 1000を指定)まだ正しい結果を印刷します。誰がどのように機能するか説明してください

(max = 0とmin = 1000を指定)まだ正しい結果を印刷します。誰がどのように機能するか説明してください
#This function is used to generate random number between (0-100)
function RandomGen {
  for i in {0..4}; do
    arr[i]=$[$RANDOM%100]
    echo Random Number $[$i+1] is ${arr[i]}
  done
}

#This function is used to identify and display Highest and lowest number among generated random number.
function HighLow {
  max=0 # ${arr[0]}
  min=1000 # ${arr[0]}
  for i in {1..4}; do
    if [[ "${arr[i]}" -gt "$max" ]]; then
      let "max = arr[i]"
    fi
    if [[ "${arr[i]}" -lt "$min" ]]; then
      let "min = arr[i]"
    fi
  done
  echo "Highest and lowest number among those random numbers are: $max and $min respectively."
}

答え1

短い答え:まずはmax可能な最小数であり、min可能な最大数よりも高いからです。

以下は、配列内の低い点と高い点を見つける簡単なアルゴリズムです。繰り返しが4回しかないので、何が起こっているのかを確認するために紙に書き留めなければなりません。あるいは、ループに複数のエコーを入れて、何が起こっているのかを確認できます。たとえば、

max=0 # ${arr[0]}
min=1000 # ${arr[0]}
for i in {1..4}; do
    echo "Iteration $i: min=$min, max=$max"
    if [[ "${arr[i]}" -gt "$max" ]]; then
        echo "Found that ${arr[$i]} > $max"
        let "max = arr[i]"

    fi
    if [[ "${arr[i]}" -lt "$min" ]]; then
        echo "Found that ${arr[$i]} <$min"
        let "min = arr[i]" 
    fi
done
echo "Highest and lowest number among those random numbers are: $max and $min respectively."

これはあなたに与えるでしょう

Random Number 1 is 23
Random Number 2 is 19
Random Number 3 is 92
Random Number 4 is 42
Random Number 5 is 12
Iteration 1: min=1000, max=0
Found that 19 > 0
Found that 19 <1000
Iteration 2: min=19, max=19
Found that 92 > 19
Iteration 3: min=19, max=92
Iteration 4: min=19, max=92
Found that 12 <19
Highest and lowest number among those random numbers are: 92 and 12 respectively.

max最初に1000を割り当てると問題が発生します。

- - 編集する -

i=0fromを埋めてto4を繰り返したという事実を逃しました。i=14

0として繰り返すと、4私の答えはまだ正しいです。

しかし、そうでなければループarr[1]arr[4]。最小値と最大値が配列のこの部分にある場合、答えは正しいです。ただし、固定値と値に基づいてarr[0]最小値または最大値の場合は確認されず、最小値または最大値を見逃すことがあります。minmaxarr[0]

私の例では、arr[0]最小値の19より大きい23なので正解です。

関連情報