如何处理System.IndexOutOfRangeException

我在调试代码时遇到了System.IndexOutOfRangeException错误。有人能帮我解决这个问题吗?请查看图片中异常发生的位置。程序成功读取了“Line Array”的第一行,但在读取第二行时发生了异常。当i=1且j=0时发生异常。
以下是代码:

(异常图片)(Line Array图片)

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Drawing;using System.Drawing.Imaging;namespace Handwriting.SVMs{    static class Features    {        /// <summary>        ///   从包含二进制0和1的图像表示的文本中提取图像。        /// </summary>        ///         public static Bitmap Extract(string text)        {            Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);            string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);            for (int i = 0; i < 32; i++)            {                for (int j = 0; j < 32; j++)                {                           if (lines[i][j] == '0')                        bitmap.SetPixel(j, i, Color.White);                    else bitmap.SetPixel(j, i, Color.Black);                }            }            return bitmap;        }        /// <summary>        ///   从图像中提取特征向量表示,将二进制图像“平展”成0和1的数组。        /// </summary>        ///         public static double[] Extract(Bitmap bmp)        {            double[] features = new double[32 * 32];            for (int i = 0; i < 32; i++)                for (int j = 0; j < 32; j++)                    features[i * 32 + j] = (bmp.GetPixel(j, i).R == 255) ? 0 : 1;            return features;        }        /// <summary>        ///   将包含0和1的特征向量转换回图像,每个像素在图像中表示。        /// </summary>        ///         public static Bitmap Export(double[] features)        {            Bitmap bitmap = new Bitmap(32, 32, PixelFormat.Format32bppRgb);            for (int i = 0; i < 32; i++)                for (int j = 0; j < 32; j++)                {                    double v = features[i * 32 + j];                    v = 255 - Math.Max(0, Math.Min(255, Math.Abs(v) * 255));                    bitmap.SetPixel(j, i, Color.FromArgb((int)v, (int)v, (int)v));                }            return bitmap;        }        public static double[] Preprocess(Bitmap bitmap)        {            double[] features = new double[64];            for (int m = 0; m < 8; m++)            {                for (int n = 0; n < 8; n++)                {                    int c = m * 8 + n;                    for (int i = m * 4; i < m * 4 + 4; i++)                    {                        for (int j = n * 4; j < n * 4 + 4; j++)                        {                            Color pixel = bitmap.GetPixel(j, i);                            if (pixel.R == 0x00) // 白色                                features[c] += 1;                        }                    }                }            }            return features;        }    }}

回答:

尝试替换

string[] lines = text.Split(new String[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

string[] lines = text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);

另外,您必须确保text包含至少32行非空行,每行有32个字符。如果更改Split方法无效,那么问题可能出在text变量上。

从您的描述来看,似乎没有lines[1];

所有行都被放置在lines[0];中 – 您可以在第二张图片中看到这一点

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注