Thread overview
rectangular matrix
Nov 12, 2004
nix
Nov 12, 2004
larrycowan
Nov 12, 2004
nix
Nov 12, 2004
Burton Radons
Nov 14, 2004
Buchan
November 12, 2004
Hallo,

i try to built a rectangular matrix.

1 0 0      1 0 0 0
0 1 0
or  0 1 0 0 or 5 times and so on
0 0 1      0 0 1 0
           0 0 0 1
int main() {
        int[][] matrix;

        matrix.length=3;
matrix[0].length=3;
        for (int i=0; i < 3; i++){
                for
(int j=0; j < 3; j++){
                        if (i == j) {
matrix[j][i] = 1;
                        } else {
matrix[j][i] = 0;
                        }

                }
        }
return 0;
}

I get the following error message:
Error: ArrayBoundsError
darr.d(11)

This is line 11: matrix[j][i] = 0;







November 12, 2004
Instead of matrix[0].length = 3;
Use matrix[i].length = 3;
and put it between the 2 for loops.

In article <cn2bk2$7c8$1@digitaldaemon.com>, nix says...
>
>Hallo,
> 
>i try to built a rectangular matrix.
> 
>1 0 0      1 0 0 0
>0 1 0
>or  0 1 0 0 or 5 times and so on
>0 0 1      0 0 1 0
>           0 0 0 1
>int main() {
>        int[][] matrix;
> 
>        matrix.length=3;
>matrix[0].length=3;
>        for (int i=0; i < 3; i++){
>                for
>(int j=0; j < 3; j++){
>                        if (i == j) {
>matrix[j][i] = 1;
>                        } else {
>matrix[j][i] = 0;
>                        }
> 
>                }
>        }
>return 0; }
> 
>I get the following error message:
>Error: ArrayBoundsError
>darr.d(11)
> 
>This is line 11: matrix[j][i] = 0;
> 
> 
> 
> 
> 
>
>


November 12, 2004
Thank you for the hint.

In article <cn2f3d$cm5$1@digitaldaemon.com>,
larrycowan says...
> 
>Instead of matrix[0].length = 3; Use matrix[i].length
= 3;
>and put it between the 2 for loops.
> 
>In article
<cn2bk2$7c8$1@digitaldaemon.com>, nix says...
>> 
>>Hallo,
>> 
>>i try to
built a rectangular matrix.
>> 
>>1 0 0      1 0 0 0 0 1 0 or  0 1 0
0 or 5 times and so on
>>0 0 1      0 0 1 0
>>           0 0 0 1
>>int
main() {
>>        int[][] matrix;
>> 
>>        matrix.length=3;
>>matrix[0].length=3;
>>        for (int i=0; i < 3; i++){
>>                for
>>(int j=0; j < 3; j++){
>>                        if (i == j) {
>>matrix[j][i] = 1;
>>                        } else {
>>matrix[j][i] = 0;
>>                        }
>> 
>>                }
>>        }
>>return 0; }
>> 
>>I get the following error message: Error: ArrayBoundsError darr.d(11)
>> 
>>This is line 11: matrix[j][i] = 0;
>> 
>> 
>> 
>> 
>> 
>> 
>> 
> 
> 



November 12, 2004
larrycowan wrote:
> Instead of matrix[0].length = 3;
> Use matrix[i].length = 3;
> and put it between the 2 for loops.

Optionally, this will require fewer allocations:

    template Matrix (Type)
    {
        Type [] [] allocate (size_t a, size_t b, Type [] array)
        {
            Type [] [] result;

            if (a && b)
                assert (size_t.max / a >= b);
            assert (array.length >= a * b);
            result = new Type [] [a];

            size_t index = 0;
            foreach (inout Type [] item; result)
            {
                item = array [index .. index + b];
                index += b;
            }

            return result;
        }

        Type [] [] allocate (size_t a, size_t b)
        {
            return allocate (a, b, new Type [a * b]);
        }
    }

    float [] [] matrix = Matrix! (float).allocate (16, 16);

There should also be efficient resize and right/down-shifting (inserting space into the left or top of the matrix) functions; give me a second.
November 14, 2004
On Fri, 12 Nov 2004 12:51:14 +0000 (UTC), nix <nix_member@pathlink.com> wrote:

> Hallo,
> i try to built a rectangular matrix.
> 1 0 0      1 0 0 0
> 0 1 0
> or  0 1 0 0 or 5 times and so on
> 0 0 1      0 0 1 0
>            0 0 0 1
> int main() {
>         int[][] matrix;
>        matrix.length=3;
> matrix[0].length=3;
>         for (int i=0; i < 3; i++){
>                 for
> (int j=0; j < 3; j++){
>                         if (i == j) {
> matrix[j][i] = 1;
>                         } else {
> matrix[j][i] = 0;
>                         }
>                }
>         }
> return 0;
> }
> I get the following error message:
> Error: ArrayBoundsError
> darr.d(11)
> This is line 11: matrix[j][i] = 0;
>
>

Whats wrong with int[3][3] matrix? Then at least the compiler knows
how big it is... unless you want to figure out how big they are at RT.
(Its also faster and in one block of memory, meaning you can do more tricks)

-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/m2/