2017-04-20 10 views
0

ライブラリチェックイン/チェックアウトシステムのシミュレーションを実行しようとしています。私はすべてのオブジェクトを作成しましたが、シミュレーション自体を実行するループに問題があります。私のコード:Javascriptでネストされたforループとifループを統合する際の問題

擬似コード:

//while loop or for loop for 90 days 
     //For loop over catalog 
     //forloop over patrons 
      //Check if available , if so check book out 
      //If not available check book back in 
       //check checking back in check to see if book is overdue and if so add a fine 
    //When down loop over patrons to see their fees 

そのループでの私の試み

for (var j = 0; j < 90; j++) {    
    for (var i = 0; i < catalog.length; i++) { 
     for (var k = 0; k < patrons.length; k++) { 
      if (books[k].Available = true) { 
       books[k].checkOut = true; } 
       else { 
        books[k].Available = true; 
       } 
       if (books[k].isOverdue = true) { 
        fine = fine + 5.00; 
       } 
      } 
     } 
     patrons[j].fine = fine; 
     j++; 
    } 

お二と第三のループは、同じ反復変数を使用するすべてのコード

var Book = function(title, Available, publicationDate, checkoutDate, callNumber, Authors) { 
    this.title = title; 
    this.Available = Available; 
    this.publicationDate = publicationDate; 
    this.checkoutDate = checkoutDate; 
    this.callNumber = callNumber; 
    this.Authors = Authors; 
}; 

var Author = function(firstName, lastName) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
}; 

var Patron = function(firstName, lastName, libCardNum, booksOut, fine) { 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.libCardNum = libCardNum; 
    this.booksOut = booksOut; 
    this.fine = fine; 
}; 

Book.prototype.checkOut = function() { 
    this.Available = false; 
    var temp = new Date(1000000000); 
    var date = new Date() - temp; 
    var res = new Date(date); 
    this.checkoutDate = res; 
}; 

Book.prototype.isOverdue = function() { 
    var singleDay = 1000 * 60 * 60 * 24; 
    var todayDate = new Date().getTime(); 
    var difference = todayDate - this.checkoutDate.getTime(); 
    if (Math.round(difference/singleDay) >= 14) { 
     return true; 
    } 
    return false; 
}; 

Patron.prototype.read = function(book) { 
    this.booksOut.add(book); 
} 

Patron.prototype.read = function(book) { 
    this.booksOut.remove(this.booksOut.length); 
} 

var authors = []; 
authors[0] = new Author("Auth", "One"); 
authors[1] = new Author("AutL", "Two"); 

var catalog = []; 
catalog[0] = new Book('Bk1', true, new Date(2001, 1, 21), new Date(), 123456, authors); 
catalog[1] = new Book('Bk2', true, new Date(2002, 2, 22), new Date(), 987656, authors); 
catalog[2] = new Book('Bk3', true, new Date(2003, 3, 23), new Date(), 092673, authors); 
catalog[3] = new Book('Bk4', true, new Date(2004, 4, 24), new Date(), 658342, authors); 
catalog[4] = new Book('Bk5', true, new Date(2005, 5, 25), new Date(), 345678, authors); 

var patrons = []; 
patrons[0] = new Patron('Pat1', 'Wat', 1, catalog, 0.00); 
patrons[1] = new Patron('Pat2', 'Wot', 1, catalog, 0.00); 
patrons[2] = new Patron('Pat3', 'Wit', 1, catalog, 0.00); 
patrons[3] = new Patron('Pat4', 'Wet', 1, catalog, 0.00); 
patrons[4] = new Patron('Pat5', 'Wut', 1, catalog, 0.00); 

var j = 0; 

//while loop or for loop for 90 days 
    //For loop over catalog 
    //forloop over patrons 
     //Check if available , if so check book out 
     //If not available check book back in 
      //check checking back in check to see if book is overdue and if so add a fine 
//When down loop over patrons to see their fees 

for (var j = 0; j < 90; j++) {    
    for (var i = 0; i < catalog.length; i++) { 
     for (var i = 0; i < patrons.length; i++) { 
      if (books[i].Available = true) { 
       books[i].checkOut = true; } 
       else { 
        books[i].Available = true; 
       } 
       if (books[i].isOverdue = true) { 
        fine = fine + 5.00; 
       } 
      } 
     } 
     patrons[j].fine = fine; 
     j++; 
    } 

for (i = 0; i < patrons.length; i++) { 
    console.log(patrons[i].firstName + " has checked out the following books:"); 
    for (j = 0; j < patrons[i].booksOut.length; j++) { 
     console.log(patrons[i].booksOut[j].title); 
    } 
    console.log(patrons[i].firstName + " has fine amount: $" + patrons[i].fine); 
} 
+1

次の2つのネストされたループに同じループ変数を使用しています:それはうまく動作しません... – trincot

+0

@trincotそれを編集しましたが、それでも同じ出力が得られます。次のように言います。ReferenceError:booksは定義されていません –

+3

あなたは 'books'を決して定義しませんでした。あなたはそこにたくさん混じっています: '客席[j]' '' '客席' 'インデックスを繰り返し、' 'j' 'は90になるでしょうか?あなたには多くの '後援者 'がいません。 'catalog'配列には本がありますが、' books'として参照しますが、 'catalog'インデックスを反復するインデックスでは参照できません.... hmmm。昼寝してもう一度やり直すの? ;-) – trincot

答えて

0

(i)

はおそらくiあなたの重複の変数名を変更し、それらをグローバルにしないためにvarを追加することを忘れないでください、あなたのコードでは別の名前に

1

を使用します。

for (var j = 0; j < 90; j++) {    
    for (var i = 0; i < catalog.length; i++) { 
     for (var n = 0; n < patrons.length; n++) { 
      if (books[n].Available = true) { 
       books[n].checkOut = true; } 
       else { 
        books[n].Available = true; 
       } 
       if (books[n].isOverdue = true) { 
        fine = fine + 5.00; 
       } 
      } 
     } 
     patrons[j].fine = fine; 
     j++; 
    } 

for (var i = 0; i < patrons.length; i++) { 
    console.log(patrons[i].firstName + " has checked out the following books:"); 
    for (var j = 0; j < patrons[i].booksOut.length; j++) { 
     console.log(patrons[i].booksOut[j].title); 
    } 
    console.log(patrons[i].firstName + " has fine amount: $" + patrons[i].fine); 
}