dポイントプレゼントキャンペーン実施中!

乱数を重複しないよう8個配列へ格納したいのですが、
格納の時点でエラーが発生します。
「オブジェクトでサポートされていないメソッドまたはプロパティです」
なぜでしょう?
どなたかご教授下さい。

numbers = new Array(); // 空の配列宣言。
function make() {
while(numbers.length < 8){
check = true;
number = Math.floor(Math.random() * 100);// ランダムに0~99までの整数を取得。
for(i = 0; i < numbers.length; i++) { // 今取得したものと同じ乱数がないか、
if(number == numbers[i]) { // 配列の中身全てと比較。
check = false;
}
}
if(check) {
numbers.push(number); // 取得した乱数を配列に格納。
}
}
}

A 回答 (2件)

> IE5.0なんですが、同様にしてみたところ、



あ、それかも。

http://msdn.microsoft.com/library/default.asp?ur …

によると、push メソッドは、JScript 5.5 を要求していて、そのバージョンは
IE5.0 では満たしていない(→参考URL)ので。

> とりあえずIE6.0に更新してみます。

これで解決するでしょう。

参考URL:http://msdn.microsoft.com/library/default.asp?ur …
    • good
    • 0
この回答へのお礼

ありがとうございました。
回線が細くIEのUPDATEに時間がかかるせいで、
検証も少々時間がかかりますが、
検証してみます。

お礼日時:2003/03/05 13:10

ブラウザは何?



質問のスクリプトを、そのまんま動かしてみたけど、動くよ。

<html>
<script>
numbers = new Array(); // 空の配列宣言。
function make() {
while(numbers.length < 8){
check = true;
number = Math.floor(Math.random() * 100);// ランダムに0~99までの整数を取得。
for(i = 0; i < numbers.length; i++) { // 今取得したものと同じ乱数がないか、
if(number == numbers[i]) { // 配列の中身全てと比較。
check = false;
}
}
if(check) {
numbers.push(number); // 取得した乱数を配列に格納。
}
}
// ここだけ追加してみた
alert(numbers.length)
for(i = 0; i < numbers.length; i++) {
alert(numbers[i])
}
}
</script>

<body>
<input type=button value="make" onclick="make()">
</body>

</html>

# IE5.5 と NS7.0 で確認。


「格納の時点でエラー」というのが勘違い、ということは無い?

この回答への補足

早速のアドバイスありがとうございます。

IE5.0なんですが、同様にしてみたところ、
13行目で同じエラーが発生しました。
13行目が"if(check) {"なので、
numbers.push(number)だと思います。

ヴァージョンの問題なのでしょうか?
ちなみに本当はonLoadでこの関数を呼び出していますが、
もちろん"make()"を呼び出す前に空の配列は宣言されていますよね。。。

とりあえずIE6.0に更新してみます。

補足日時:2003/03/05 12:42
    • good
    • 0
この回答へのお礼

本当にありがとうございました。
IE6.0にUPDATEしたらうまくいきました。

と、いうかよく見たら手元の本に確かにArrayオブジェクトの
pop、push、shift、unshiftメソッドはIE5.0以前は対応していないと
書いてありました。(汗)

お世話になりました。

お礼日時:2003/03/05 14:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!