/ / बहु-विषयक वस्तु सरणी में संपत्ति मान सेट करना - जावास्क्रिप्ट, ऑब्जेक्ट, बहुआयामी-सरणी

मल्टी-डेमेंशन ऑब्जेक्ट सरणी में गुण मान सेट करना - जावास्क्रिप्ट, ऑब्जेक्ट, बहु-आयामी-सरणी

मैं बहु-सरणी को आरंभ करने की कोशिश कर रहा हूं सुडोकू [9] [9] जिसमें शामिल है सेल जब मैं दौड़ता हूँ sudoku.initialize (), सब पंक्ति, col, डिब्बा में * सुडोकू [x] [y] * प्रत्येक each,।, ९ हैं।

  var cell = {
sol: 0,
row: 0,
col: 0,
box: 0,
candi: [1, 2, 3, 4, 5, 6, 7, 8, 9]
};


var sudoku = {}
sudoku = new Array(9);
for (var i = 0; i < 9; i++) {
sudoku[i] = new Array(9);
}
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
sudoku[i][j] = cell;
}
}
sudoku.initialize = function () {
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
sudoku[i][j].row = i;
sudoku[i][j].col = j;
if (i < 3) {
if (j < 3)
sudoku[i][j].box = 1;
else if (2 < j && j < 6)
sudoku[i][j].box = 2;
else if (5 < j)
sudoku[i][j].box = 3;
}
else if (2 < i && i < 6) {
if (j < 3)
sudoku[i][j].box = 4;
else if (2 < j && j < 6)
sudoku[i][j].box = 5;
else if (5 < j)
sudoku[i][j].box = 6;
}
else if (5 < i)
if (j < 3)
sudoku[i][j].box = 7;
else if (2 < j && j < 6)
sudoku[i][j].box = 8;
else if (5 < j)
sudoku[i][j].box = 9;
}
}
}
sudoku.print=function(){
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
document.write(sudoku[i][j].col + "&nbsp");
}
document.write("n");
}
}
sudoku.initialize();`

मुझे लगता है कि जावास्क्रिप्ट में मल्टी-डिमेंशनल सरणी के लिए गलतफहमी है।

 sudoku[2][2].box=1
1
sudoku[4][8].box=2
2
sudoku[2][2].box
2
sudoku[3][3].box
2

जावास्क्रिप्ट के लिए cuz I`m शुरुआती, यह कोड हास्यास्पद हो सकता है। लेकिन वैसे भी आप मेरा मतलब पकड़ सकते हैं।

उत्तर:

उत्तर № 1 के लिए 1

आपके बहु-आयामी सरणी में सभी 81 आइटम एक ही वस्तु की ओर इंगित करते हैं, इस वजह से:

for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
sudoku[i][j] = cell;
}
}

तुम बनाओ sudoku[i][j] एक ही वस्तु के लिए एक संदर्भ स्टोर करें cell.
जब आप बाद में मानों को संशोधित / एक्सेस करने का प्रयास करते हैं sudoku[2][2], sudoku[3][3], sudoku[4][8], आप वास्तव में एक ही वस्तु के साथ काम करते हैं।

आपको प्रत्येक सेल के लिए एक नई वस्तु बनाने की आवश्यकता है।
इस तरह से अपना कोड बदलने से मदद मिलनी चाहिए:

for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
sudoku[i][j] = {
sol: 0,
row: 0,
col: 0,
box: 0,
candi: [1, 2, 3, 4, 5, 6, 7, 8, 9]
};
}
}

तुम भी इतने सारे की जरूरत नहीं है ifआप में है initialize तरीका।
कुछ गणित और पूर्णांक विभाजन / मापांक सभी जादू को कोड की दो लाइनों में करेगा;)

function Cell(row, col)
{
this.col = col;
this.row = row;
this.sol = 0;
this.box = Math.ceil(row / 3) * 3 + Math.ceil(col / 3) - 3;
this.candidates = [1, 2, 3, 4, 5, 6, 7, 8, 9];
}

function Sudoku()
{
this.rows = new Array(9);
for (var i = 0; i < 9; i++)
{
this.rows[i] = new Array(9);
for (var j = 0; j < 9; j++) {
this.rows[i][j] = new Cell(i, j);
}
}

this.print = function() {
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
document.write(this.rows[i][j].row + "/" + this.rows[i][j].col + "&nbsp");
}
document.write("<br/>");
}
};
}

var sudoku = new Sudoku();
sudoku.print();


जवाब के लिए 0 № 2

समस्या यह है कि आप अपने प्रत्येक सेल में एक ही ऑब्जेक्ट को असाइन कर रहे हैं। क्योंकि जावास्क्रिप्ट में वस्तुओं को संदर्भ (मूल्य से नहीं) द्वारा संग्रहीत किया जाता है, कर रहा है

sudoku[1][2] = cell;

अनिवार्य रूप से बनाता है sudoku[1][2] तथा cell एक ही बात का मतलब है। आपको हर एक स्थिति के लिए एक नई सेल ऑब्जेक्ट बनाने की आवश्यकता है sudoku। जावास्क्रिप्ट और तात्कालिक वस्तुओं में "कक्षाओं" को परिभाषित करने के तरीके पर बहुत सारी सामग्री उपलब्ध है, उदाहरण के लिए देखें:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

यद्यपि अन्य संभव दृष्टिकोण हैं, उदाहरण के लिए आप ऑब्जेक्ट को क्लोन कर सकते हैं, प्रोटोटाइप का उपयोग कर सकते हैं, आदि।