я писал программу, которая принимает ввод с клавиатуры и печатает квадратную матрицу в следующей форме спиралиC# два заявления в то время как
1 2 3
8 9 4
7 6 5
мне удалось написать программу, но я столкнулся с странными ошибками. в строке 26 он дает мне индекс из связанного исключения
while (matrix[row, col] == 0 && col < matrix.GetLength(0))
Однако если изменить порядок двух операторов внутри цикла исключение отступило? Означает ли это, что порядок двух операторов в цикле while важен? И если да, то почему? Не должно быть, если оба оператора верны для выполнения цикла, и если один из них является ложным, независимо от того, какой из них прекратит его выполнение.
Вот мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SpiralMatrixN
{
class Program
{
static void Main(string[] args)
{
//prompt the user to enter n
Console.WriteLine("Enter the value of n");
int n = int.Parse(Console.ReadLine());
int[,] matrix = new int[n,n];
Console.Clear();
System.Console.SetWindowSize(100, 30);
int value = 1;
int col = 0;
int row = 0;
if (n>0 && n<21)
{
while(value <= n*n)
{
while (matrix[row, col] == 0 && col < matrix.GetLength(0))
{
matrix[row, col++] = value;
value++;
}
col--;
row++;
while (row < matrix.GetLength(1) && matrix[row, col] == 0)
{
matrix[row++, col] = value;
value++;
}
row--;
col--;
while (col >= 0 && matrix[row, col] == 0)
{
matrix[row, col--] = value;
value++;
}
col++;
row--;
while (matrix[row, col] == 0 && row >= 0)
{
matrix[row--, col] = value;
value++;
}
col++;
row++;
}
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
Console.SetCursorPosition(j * 5, i * 2);
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
}
}
}
}
Я хотел бы убедиться, что значения '' row' и col' то, что вы ожидаете, что они будут. Поместите точку останова и убедитесь, что цикл работает так, как вы этого хотите. –
Вы должны разместить свой код здесь – demonplus
Да, из-за короткого замыкания. Я уверен, что где-то есть хороший дубликат. – harold