第一次海报很抱歉,如果这太长了,但是我已经撞墙了,不知道还有什么可以尝试。
我正在使用C#和WPF制作矩阵计算器。
我花了最后一小时试图找出我的Array Iterator查看和编辑2D NxN数组中的值有什么问题。
为了更好地了解我的项目到目前为止要求用户输入大小n来制作数组。它将生成一个大小为NxN为0的2D int数组,并从默认位置(0,0)开始。从那里,用户可以编辑从左到右,从上到下编辑整个数组的值。
我有2个私有全局整数,一个跟踪行位置,一个跟踪列位置并操纵这些数字来编辑数组的那一部分。
迭代开始精细(0,0)> (0,1);而不是从(0,1)> (0,2)它应该跳到(1,1)。我已经无数次超过了我的逻辑而无法找到我在做错的地方。
我还没有测试从右到左,从下到上的遍历,但由于它的逻辑几乎完全相同,我认为它将具有我目前遇到的相同问题。
非常感谢,如果有人可以指出我的逻辑在哪里有缺陷,那么我可以继续编写其他部分的代码。
我的代码如下:
private int[,] matrix; //Matrix currently being edited
private int row; //keeps track of current row position and set to 0 when matrix is made
private int col; //Keeps track of current column position and set to 0 when matrix is made
private void previousPos_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("row " + row + "\r\n col " + col);
if (row < 0 && col < 0)
{
textBlock1.Text = "No previous values to edit";
row = 0;
col = 0;
positionDisplay.Text = "" + col + ", " + row;
}
else if (row < 0 && col < 3)
{
setValue(row, col, valueDisplay.Text);
row = 2;
col -= 1;
displayMatrix(matrix);
positionDisplay.Text = "" + col + ", " + row;
}
else
{
setValue(row, col, valueDisplay.Text);
row -= 1;
displayMatrix(matrix);
positionDisplay.Text = "" + col + ", " + row;
}
}
private void nextPos_Click(object sender, RoutedEventArgs e)
{
Console.WriteLine("row "+row+"\r\ncol "+col);
if (row >= matrix.GetLength(0) && col >= matrix.GetLength(1))
{
textBlock1.Text = "No more values to edit";
row = matrix.GetLength(0) - 1;
col = matrix.GetLength(1) - 1;
positionDisplay.Text = "" + col + ", " + row;
}
else if (row >= matrix.GetLength(0) && col < matrix.GetLength(1))
{
setValue(row, col, valueDisplay.Text);
col += 1;
row = 0;
displayMatrix(matrix);
positionDisplay.Text = "" + col + ", " + row;
}
else
{
setValue(row, col, valueDisplay.Text);
row += 1;
displayMatrix(matrix);
positionDisplay.Text = "" + col + ", " + row;
}
}
public void setValue(int curRow, int curCol, string value)
{
col = curRow;
row = curCol;
try
{
matrix[row, col] = int.Parse(value);
}
catch(Exception)
{
string messageBoxText = "Please input a valid number";
string caption = "Warning";
MessageBoxButton button = MessageBoxButton.OK;
MessageBoxImage icon = MessageBoxImage.Warning;
MessageBox.Show(messageBoxText, caption, button, icon);
}
}
编辑:修复了我看到的错字,并愿意根据请求发布更多/其余代码。
答案 0 :(得分:3)
你在setValue()中有这个错误:
col = curRow;
row = curCol;
列等于行?错字!