So, here is the full code:

```d
enum Color {none=0,red=1,black=2};
enum sColor {black=0,white=1};
class Square {
public:
    this(Color color, sColor Scolor) {
    this.color = color;
    this.Scolor = Scolor;
    }
    Color color;
    sColor Scolor;
}
import std.stdio;
void cPrintboard(Square[8][8] square)
{
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            final switch(square[i][j].color) {
            case Color.none:
                write(" n ");
                break;
            case Color.red:
                write(" r ");
                break;
            case Color.black:
                write(" b ");
                break;
            }
        }
        writeln("");
    }
    writeln("");
}
void sPrintboard(Square[8][8] square) {
    for(int i=0;i<8;i++)
    {
        for(int j=0;j<8;j++)
        {
            final switch(square[i][j].Scolor) {
            case sColor.white:
                write(" w ");
                break;
            case sColor.black:
                write(" b ");
                break;
            }
        }
        writeln("");
    }
    writeln("");
}
bool isEven(int a)
{
    return a&1;
}
void main()
{
    Square[8][8] square;
    for(int i=7;7>=0;i--)
    {
        for(int j=7;j>=0;j--)
        {
            if((isEven(i)&&isEven(j))^(!isEven(i)&&!isEven(j)))
square[i][j] = new Square(Color.none, sColor.white); else if((!isEven(i)&&isEven(j))^(isEven(i)&&!isEven(j))) square[i][j] = new Square(Color.none,sColor.black);
            else
                assert(false);

        }
    }
    for(int i=2;i>=0;i--)
    {
        for(int j=7;i>=0;j--)
        {
            if((!isEven(i)&&isEven(j))^(isEven(i)&&!isEven(j)))
square[i][j].color = Color.red; //The program breaks here, with a range violation message
            else
            {

            }
        }
    }
    cPrintboard(square);
    sPrintboard(square);
}
```

What am I doing wrong here? Is it the 'for' loop?

Reply via email to