【问题标题】:faild to move the element in between?未能在两者之间移动元素?
【发布时间】:2020-07-03 21:02:27
【问题描述】:

我一直在尝试用 Blacktracking 算法解决数独,一切都很好,调用了 canvar,我可以看到数字,但数字没有移动,即逻辑没有执行 current.i === 0; 是我得到错误的地方!即使我已经为 num 声明了一个单独的变量,问题也没有得到解决。只有当我删除 .num current == 0 时,它才没有显示任何错误,但数字仍然没有移动

enter image description here

var cell = [];
var stack = [];
var sudoku =  [2,3,0,9,4,0,6,7,0,
               8,0,0,3,2,5,9,1,4,
               9,0,0,7,6,0,3,2,0,
               1,0,0,0,0,0,7,9,2,
               5,0,3,2,1,0,4,8,6,
               4,0,0,6,8,0,5,3,1,
               7,0,0,1,0,0,0,0,9,
               6,5,9,8,7,2,1,4,3,
               3,0,0,0,9,0,0,0,7];
var current;
var number = 1;

function setup(){
    createCanvas(450,450);
    var a=0;
    var b=0;
    for(var i=0;i<81;i++){
        if(a%9==0 && i!=0){
            b = b+50;
            a = 0;
        }
        each[i] = new each(a,b,i,sudoku[i]);
        a = a+50;
    }
    current = cell[0];
}

function draw(){
    background(10);
    for(var i=0;i<81;i++){
        each[i].show();
    }

    if(current.num === 0){ //the error is typeerror can't read the property of num 

        if(! sameColumn(current.i,number) && ! sameRow(current.i,number) && ! sameSquare(current.i,number) && number<(10)){
            current.num = number;
            stack.push(current);
            number = 0;
            current.each[current.i+1];
        }
        else {
            if(number > 8){
            current.num = 0;
            current = stack.pop();
            number = current.num;
            current.num = 0;
        }
        } 
    }
    else{
        current = each[current+1];
        number = 0;
    }
    number++;
}

function each(a,b,i,num){
        this.a = a;
        this.b = b;
        this.i = i;
        this.num = num;
        this.show = function(){
            noFill();
            stroke(255);
            rect(this.a,this.b,50,50);
            textSize(32);
            text(this.num,a+12,b+40);
        }
    }

【问题讨论】:

    标签: javascript html algorithm javascript-objects p5.js


    【解决方案1】:

    这个错误非常简单。 current = cell[0]; 变得未定义,因为您将 cell 定义为一个空数组并且之后没有对其进行操作。

    从我目前观察到的情况来看,你的代码的许多部分在逻辑上都不起作用,例如,

    same Column(current.i,number) && ! sameRow(current.i,number) && ! sameSquare(current.i,number)
    

    如果执行了肯定会报错(不是因为执行没有到达那一行),除非你有一个单独的 js 文件包含这些函数。

    另一个是

    current = cell[current+1];
    

    如果current变量是用来存储cell对象的,加1是没有意义的,反之亦然。

    现在我相信 setup 函数应该是这样的:

    function setup(){
        createCanvas(450,450);
        var a=0;
        var b=0;
        for(var i=0;i<81;i++){
            if(a%9==0 && i!=0){
                b = b+50;
                a = 0;
            }
            cell[i] = new Cell(a,b,i,sudoku[i]); //changed each[i] to cell[i], also renamed the 'each' class
            a = a+50;
        }
        current = cell[0];
    }
    

    如果可能,请编辑更多关于您的代码具体做什么的信息。干杯:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2022-12-12
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多