2 svar
118 visningar
NikBjo behöver inte mer hjälp
NikBjo 12 – Fd. Medlem
Postad: 10 maj 2021 12:49

Problem med att fylla en 2D-array

Hej.

Jag ska fylla en 2D-array med tecken för att skriva ut ett mönster.
Övre delen av programmet avslutas p.g.a. (out of range exception) när column blir >8.

Programmet funkar när jag skriver ut tecknen med "Console.Write" men inte när jag fyller arrayen.

Jag förstår inte varför. Någon som kan hjälpa mig och förklara vart problemet är?

Jag skulle kunna fylla arrayen manuellt men vill lyckas göra det med loopar istället.

using System;
using System.Linq;

namespace Array9
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            // #---#---
            // -#---#--
            // --#---#-
            // ---#---#

            //int[,] array2D = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
            string[,] array2D = new string [3, 7];
            for (int rad = 0; rad < 4; rad++)
            {
                for (int column = 0; column < 8; column++)
                {
                    if (rad == column)
                        array2D[rad, column] = "#";
                        //Console.Write("#");

                    else if (rad +4 == column)
                        array2D[rad, column] = "#";
                        //Console.Write("#");

                    else 
                        array2D[rad, column] = "-";
                        //Console.Write("-");
                }
                //Console.WriteLine("");
            }
           /*var rowCount = array2D.GetLength(0);
            var colCount = array2D.GetLength(1);

            for (int row = 0; row < rowCount; row++)
            {
                for (int col = 0; col < colCount; col++)
                {
                    Console.Write(String.Format("{0}\t", array2D[row, col]));
                    Console.WriteLine();
                }
            }*/
            Console.ReadKey();
            //.WriteLine(array2D[3,8]);

            /* for (int i = 0; i < 4; i++)
             {
                Console.Write (array2D[i, rad] + "");
             }
             Console.WriteLine (""); rad++;
             for (int i = 0; i < 4; i++)
             {
                Console.Write(array2D[i, rad] + " ");
             }
             Console.WriteLine(""); rad++;
             for (int i = 0; i < 4; i++)
             {
                 Console.Write(array2D[i, rad] + " ");
            */
        }
    }
}
Laguna Online 30708
Postad: 10 maj 2021 13:07

Enligt deklarationen har arrayen tre rader och sju kolumner (eller kanske tvärtom).

Då finns kolumnerna 0, 1, 2, 3, 4, 5 och 6. Kolumn 7 finns inte.

Kort sagt, du ska ha samma gräns i loopvillkoret som i deklarationen. 

NikBjo 12 – Fd. Medlem
Postad: 10 maj 2021 13:26
Laguna skrev:

Enligt deklarationen har arrayen tre rader och sju kolumner (eller kanske tvärtom).

Då finns kolumnerna 0, 1, 2, 3, 4, 5 och 6. Kolumn 7 finns inte.

Kort sagt, du ska ha samma gräns i loopvillkoret som i deklarationen. 

Tack!
Jag tänkte att jag satte ut 0-3 (4 rader) och 0-7 (8 kolumner), men självklart ska det vara (4, 8) som visat antal rader och kolumner.

Svara
Close