2017-07-12 14 views
1

このエクササイズでは立ち往生しません。配列に名前を付けてランダムに選択する(Javascript)

コンテストや賞品の抽選で勝者を選ぶプログラムを作成します。ユーザーがエントリを空白のままにするまで、競技者の名前を尋ねます。次に勝者をランダムに選択します。

出力例

は、名前を入力します:ホーマー
は、名前を入力してください:バート
は、名前を入力してください:マギー
は、名前を入力してください:リサ
は、名前を入力してください:萌え
は、名前を入力します。 :
勝者はマギーです。

制約

•配列にユーザー入力をキャプチャするためにループを使用してください。
•乱数ジェネレータを使用して配列から値を抽出します。
•アレイに空白のエントリを含めないでください。
•一部の言語では、事前にアレイの長さを定義する必要があります。 ArrayListのような別のデータ構造を見つける必要があるかもしれません。

**新しいプログラミング

にこれは私がこれまでにやっていることです:

var name; 
 
var users = []; 
 
var winner = Math.floor(Math.random() * users.length + 1); 
 

 
while (true) { 
 
    users.push(name = prompt("Enter a name:")); 
 
    if (name === "") { 
 
    break; 
 
    } 
 
}; 
 

 
document.write(users + "<br>" + winner);

をしかし、勝者変数は1が、何も表示されませんか?

+0

これまでに試したことを投稿できますか? –

+1

「入力が値を持っている間に」配列にプッシュしますか? –

+0

@TahaPaksuありがとうございます。 – AKL012

答えて

2

これは練習を台無しとして、私は、あなたに適切なコードを与えることはありませんが、これはアイデアです

にwhileループを使用します。

setup array 
    while (true) 
    wait for input 
    if input blank 
     break out of loop 
    else 
     add entry to array 
    end-while 
    choose a winner 
    end 
+0

@ AKL012 [this](https://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-特定の範囲内の)質問を使用して、配列の長さの範囲内の乱数を取得します。 – abhinav

0

は、感謝のすべてを、それを手に入れました。

var name; 
 
var users = []; 
 

 
while (true) { 
 
    users.push(name = prompt("Enter a name:")); 
 
    if (name === "") { 
 
    break; 
 
    } 
 
}; 
 

 
var numUsers = users.length - 1; 
 
var winner = Math.floor(Math.random() * numUsers + 1); 
 

 
document.write("The winner is..." + users[winner]);

+1

-1と+1の両方を行う理由はありません。)これは0のネット演算であり、コードは読みにくくなります。 – Icepickle

2

配列が名前が移入される前に、あなたはランダムなインデックスを取得することはできません。まず、whileループを使用して名前を収集し、次にランダムなインデックスを取得します。

移動このライン:whileループ後

var winner = Math.floor(Math.random() * users.length); 

あなたはインデックスを見つけましたが、関連インデックスを使用して配列から値を選択するのを忘れました。次を追加してください:

document.write(users + "<br>" + users[winner]); 
+0

0ベースのインデックスなので、+1も必要ありません) – Icepickle

+0

ありがとう、修正されました! –

2

実際にはほとんどありません。

元の投稿に最初に間違っていたのは、名前を追加する前にユーザーを選択したという事実でした。選択は入力後に行わなければなりません。

2番目の問題は、ランダムなnrジェネレータに+1を追加したことでした。それは必要ではありません。javascript配列は0ベースなので、4つのエントリの長さのインデックスは0から3までです。

最後に欠けていたのは、そのためには、ユーザーアレイにアクセスして、あなたが選択したインデックスを表示することができます。users[winner]

)(users.lengthプロパティをチェックして)

var name; 
 
var users = []; 
 

 
while (true) { 
 
    users.push(name = prompt("Enter a name:")); 
 
    if (name === "") { 
 
    break; 
 
    } 
 
}; 
 
// the winner can only be decided here (and + 1 is not necessary as Javascript has a 0 based index in arrays) 
 
var winner = Math.floor(Math.random() * users.length); 
 
// add the user array so you can get the index 
 
// the join will make sure that your users are shown below eachother 
 
alert(users.join('\n') + "\n" + users[winner] + ' won');

関連する問題