2017-11-02 6 views
2

すべてのプレイヤーにカードを配布しようとしています。利用可能な席は8席あります。取引はどのポジションからでも始めることができます。下の例は、開始位置が3であることを示しています。これは、3-4-5-6-7-8-1-2の順でカードが処理されることを意味します。対処が7で始まる場合、それは7-8-1-2-3-4-5-6などとなります。 私の現在のループは8時に終了します。続ける方法がわかりません。私はこれをしようとした場合ループを進めてから最初の位置に進みます-1

var a = 3; //this is the variable starting position 
     for (i = a; i < 9; i++) { 
      var nextavail = $('#seat' + i).find('.back'); 
      if (nextavail.length > 0) { 
       oPosition.seat = 'seat' + i; 
       oPosition.cardid = $(nextavail[0]).data('card'); 
       break; 
      } 

は、ここに私のコードですfor (i = a; i < 9; i++, i == 8 ? 7 : i = 1)これは無限ループに私を取ります。何か案は?

+3

を使用してみてくださいr。 'nextavail = nextavail%9'は0に戻ります。必要に応じて1を追加します。 – theGleep

+0

あなたはforループにi = 1を作り続けています。それは永遠に続くでしょう – schylake

+0

@theGleep私に例を教えてください。私はJSの初心者です – alwaysVBNET

答えて

2

var start = 3; 
 
var max = 9; 
 
for (var i=start; i < max + start; i++) { 
 
    var number = (i > max)? i % max : i; 
 
    console.log(number); 
 
}

この生成3、4、5、6、 7、8、9、1、2

0

ループは、9より小さい最大値iで終了します。あなたは私 が移動する場合3-4-5-6-7-8-9-1-2

for (j = a-1; j < 8+a ; j++){ 
    i = j%9 + 1 ; 
// putting the rest of the code of the for loop inside 

var nextavail = $('#seat' + i).find('.back'); 
     if (nextavail.length > 0) { 
      oPosition.seat = 'seat' + i; 
      oPosition.cardid = $(nextavail[0]).data('card'); 
      break; 
     } 


} 
0
var a = 3; //this is the variable starting position 
var seats = 8; // seats count 
for (var i = 0; i < seats; i++) { 
    var currentPosition = (a + i) === seats ? seats : (a + i) % seats; 
    var nextavail = $('#seat' + currentPosition).find('.back'); 
    if (nextavail.length > 0) { 
    oPosition.seat = 'seat' + currentPosition; 
    oPosition.cardid = $(nextavail[0]).data('card'); 
    break; 
    } 
} 

は、この種のことは、 "モジュラス"( `%`)operatoの優れた使用であるモジュラスオペレータ

関連する問題