Search code examples
c#winformstextbox

Any idea why second element of array is not being assigned a value?


I have set up a spreadsheet program with a 26 by 26 grid of cell objects. I set up a method which processes a formula entered by the user. The user can enter, for example, =A1+A2 and the method checks the values of cells A1 and A2 and adds them together. For some reason, the value of the second cell is not being assigned to the array.

https://pasteboard.co/IqRO23M.png

The code continues the switch case statement for other operators but that's not important for this problem.

public static void ProcessBasicFormula(Cell selectedCell,Cell[,] 
cell,string[] cellsInUse, char operatorInUse)
    {
        int[] valueOfCell = new int[cellsInUse.Length]; //valueOfCell and 
        cellInUse have same length
        int counter = 0;
        double answer = 0.0;
        switch(operatorInUse)
        {
            case ('+'):
             for (int i = 0; i < cellsInUse.Length; i++)
             {
               for (int j = 0; j < cellsInUse.GetLength(0); j++)
               {
                for (int k = 0; k < cellsInUse.GetLength(0); k++)
                {
                  if (cellsInUse[i] == cell[j, k].CellID)
                  {
                    valueOfCell[counter] =Convert.ToInt32(cell[j,k].Text);
                    counter++;
                  }
                 }
                }
               }
          answer = valueOfCell[0] + valueOfCell[1];
          break;

I expect the values of the two cells to be added together but instead, I am getting the first value added by 0.


Solution

  • my assumptions are:

    1. the cellsInUse array length is accurate
    2. List item the cell value at index 1 is not zero

    the new int[int] will initialize the array to zeros; int[] valueOfCell = new int[cellsInUse.Length];

    cellsInUse is one dimensional array;

    string[] cellsInUse
    

    the getLength(0) of one dimensional array is the same as .length

    cellsInUse.length == 2 is true; cellsInUse.GetLength(0) == 2 is true;

    so the j and k loops are looping to 2.

    I am assuming the first cell value was lucky enough to be in first subset of [2,2] cells.

    should the cellsInUse.GetLength(0) be cell.GetLength(0) => j and cell.GetLength(1) => k