2016-12-01 13 views
1

このプログラムの主な目的は、ユーザーが選択した回数だけカードの描画をシミュレートし、 '*'を使ってヒストグラムをプリントアウトして各カードのヒット数しかし、私が抱えている問題は、各配列の要素を検索し、それらと相関する星印を印刷することです。Bash:配列を繰り返して各インデックスの値を取得する

timelimit=5 
echo -e "How many trials would you like to run? \c" 
read -t $timelimit trials 

if [ ! -z "$trials" ] 
then 
    echo -e "\nWe will now run $trials trials" 
else 
    trials=10 
    echo -e "\nWe will now run the default amount of trials: $trials" 
fi 

count=1 
MAXCARD=53 
declare -a CARDARRAY 

while [ "$count" -le $trials ] 
do 
    card=$RANDOM 
    let "card %= MAXCARD" 
    let "CARDARRAY[$card] += 1" 
    let "count += 1" 
done 
echo ${CARDARRAY[@]} 

for ((i=0; i<${#CARDARRAY[@]}; i++)); 
do 
    #declare "temp"="${CARDARRAY[$i]}" 
    #echo "$temp" 
    #for ((j=0; j<temp; j++)); 
    #do 
    #echo "*" 
    #done 
    echo "$i" 
done 
明らか

ループの最後には、私はトラブルを抱えているところであり、現在、各カードが持っているどのように多くのヒットに応じて星を印刷での最新の試みである:これは私がこれまで持っているものです。

答えて

2

あなたはかなり近くでした。ここで私はあなたのスクリプトを言い換えたい方法は次のとおりです。

#!/bin/bash 
timelimit=5 
printf %s 'How many trials would you like to run? ' 
read -t $timelimit trials 

if [[ ! -z $trials ]] ; then 
    printf '\nWe will now run %d trials\n' $trials 
else 
    trials=10 
    printf '\nWe will now run the default amount of trials: %d\n' $trials 
fi 

count=1 
MAXCARD=53 
declare -a CARDARRAY 

while ((trials--)) ; do 
    ((CARDARRAY[RANDOM % MAXCARD] += 1)) 
done 

printf '%s\n' "${CARDARRAY[*]}" 

for ((i=0 ; i<MAXCARD ; i++)) ; do 
    printf %02d: $i 

    for ((j=0 ; j<${CARDARRAY[i]:-0} ; j++)) ; do 
     printf %s '*' 
    done 
    printf '\n' '' 
done 

あなたは、各ステップで実行されているものをbashを見るためにset -xvを使用することができます。

+0

CやJavaのような言語から来ているので、bashのフォーマットは非常に新しいです!お手伝いありがとう! – Hotshot

関連する問題