2016-05-22 9 views
1

後、私は、最小の一番高いから山の配列をソートするために取得しようとしているが、印刷しようとしたとき、私は私がすべてのステップが欠落していないと思う未定義配列プッシュ

TypeError: mountainArray[i] is undefined 

を取得します解決策が、私は未定義になる。事前に

おかげ以下

コード:

var position; 
 
var height; 
 

 
function Mountain(position, height) { 
 
    this.position = position; 
 
    this.height = height; 
 
} 
 

 
function sortMountain(a, b) { 
 
    return b.height - a.height; 
 
} 
 

 
var mountainArray = []; 
 

 
// game loop 
 
while (true) { 
 
    for (var i = 0; i < 8; i++) { 
 
    var mountainH = parseInt(readline()); // represents the height of one mountain, from 9 to 0. 
 

 
    mountainArray.push(Mountain(i, mountainH)); 
 
    mountainArray.sort(sortMountain); 
 

 

 
    } 
 
    for (var i = 0; i < 8; i++) { 
 
    print(mountainArray[i].position); 
 
    } 
 
}

答えて

2

あなたのクラスが書かれている方法:

function Mountain(position, height) { 
    this.position = position; 
    this.height = height; 
} 

あなたはときnewキーワードを使用する必要がありますあなたはプッシュします:

while (true) { 
    for (var i = 0; i < 8; i++) { 
    var mountainH = parseInt(readline()); // represents the height of one mountain, from 9 to 0. 

    mountainArray.push(new Mountain(i, mountainH)); // HERE 
    mountainArray.sort(sortMountain); 


    } 
    for (var i = 0; i < 8; i++) { 
    print(mountainArray[i].position); 
    } 
} 

コメントで指摘されているように、ループで毎回それを行う必要はありません。

+0

readlineは前に呼び出されます。問題は、mountainArray.push(新しいMountain(i、mountainH))から新しい部分が失われていた。私はゼロからJSを学ぶ必要があると思われる –

+3

また、配列を一度ソートする必要があります...ループの各反復ではありません – charlietfl

+0

コードが正しくエラーを修正している間、テキストは少しオフです。 'new'は' push'ingとは何の関係もありません。 'new'が必要なのは、' Mountain'にプレーンなコンストラクタ関数があるからです。これは 'new'で使わないと何も返さないからです。 'Mountain'を別の方法で書くことを選択した場合、' new'なしで 'push'を使うことができます。 –

関連する問題