日期:2014-05-18  浏览次数:21007 次

winform 文本框中输入的矩阵读入到二维数组当中的问题
窗口中有两个文本框 txt1 txt2 和一个button
我在类当中定义的:
  static double[ , ]m;
  static string[] b;
当运行程序的时候 如果输入一个“,”后,会出现错误

txt1的keypress事件为
  private void txt1_KeyPress(object sender, KeyPressEventArgs e)
  {
  if (e.KeyChar < '0' || e.KeyChar > '9')
  {
  e.Handled = true;
  }
  if (e.KeyChar == 8 || (e.KeyChar == 13 || e.KeyChar == 44 || e.KeyChar==46 )) //限制只能输入逗号、小数点和数字。
  {
  e.Handled = false;
  }  
button的click事件为
 private void button1_Click_1(object sender, EventArgs e)
  {
  int k, j;
  int c;
  int i = txt1.Lines.Length; //文本的行数  
  string[] temp = new string[i];
  temp = txt1.Lines; // temp数组记录的是文本框中每一行的字符串
  for (k = 0; k < i; k++)
  {
  b = temp[k].Split(','); //以“,”分割每一行的字符串,得到字符串数组b
  c = b.Count(); //计算每一行中数组b中字符的个数;
  for (j = 0; j < c; j++)
  {
  double[,] m = new double[i, c]; //i为二维数组的行数,c为二维数组的列数,也就是m[i,c]的二维数组。
  m[k, j] = double.Parse(b[j]); //将分割的字符转化为 double 类型
  } //这里出现错误:“输入字符串的格式不正确”
  }
  txt2.Text = m[0,0].ToString();
 //这里有个问题:“m”与声明“测绘.Form4.m”冲突  
 }

点击button时,本想将矩阵传入到二维数组中,但是出现错误,程序停止


------解决方案--------------------
textchanged事件中判断是否endwith(",,")
在你的另一个贴子里刚回复了你。
------解决方案--------------------

double d = 0;
// m 应该在此处初始化
m = new double[i];

for (k = 0; k < i; k++)

// ...此处略去若干个字


// m[k]应该这样初始化

m[k] = new double[c];
for (j = 0; j < c; j++)
{

// 下面的语句属于初始化的逻辑有错误
//double[,] m = new double[i, c]; //i为二维数组的行数,c为二维数组的列数,也就是m[i,c]的二维数组
//m[k, j] = double.Parse(b[j]); //将分割的字符转化为 double 类型

// m[k,j]应该这样赋值
if(double.tryParse(b[j],d)}{
m[k,j] = d;
}


}
 
txt2.Text = m[0,0].ToString(); 
}