ошибка символа в строке - PullRequest
1 голос
/ 19 января 2012

Я в настоящее время только 2 ошибки от работающей программы.Я выложу строку, которая содержит ошибку и определение ее переменной и, наконец, ошибки.Пожалуйста, скажите мне, где я ошибся.Спасибо.

    private Dictionary<string, bool[]> letterData = new Dictionary<string, bool[]>();


    public char[] mapNeurons()
    {
        char[] map = new char[this.letters.Items.Count];

        for (int i = 0; i < map.Length; i++)
        {
            map[i] = '?';
        }
        for (int i = 0; i < this.letters.Items.Count; i++)
        {
            double[] input = new double[Form1.DOWNSAMPLE_HEIGHT * Form1.DOWNSAMPLE_WIDTH];
            char ch = ((string)(this.letters.Items[i]))[0];
            bool[] data = this.letterData[ch]; //line contains errors
            for (int j = 0; j < input.Length; j++)
            {
                input[j] = data[j] ? 0.5 : -0.5;
            }

            int best = this.network.Winner(input);
            map[best] = ch;
        }
        return map;
    }

и вот ошибка

Ошибка 1 Наилучшее совпадение перегруженного метода для 'System.Collections.Generic.Dictionary.this [string]' имеет недопустимые аргументы

Ошибка 2 Аргумент '1': невозможно преобразовать из 'char' в 'string'

Я использовал Char вместо String, потому что если использовать String, он вернет всю строку загруженной строки, iпросто хочет вернуть первую букву строки

, например: data = A1: 000001100000000110000000111000000011100000001

если использовать строку, она вернет всю строку, я просто хочу, чтобы она возвратила 'A'

НОВАЯ ИДЕНТИФИЦИРОВАННАЯ ПРОБЛЕМА: когда я ввожу данные, я помещаю данные в клавишу «А1», которая объясняет, почему я использую строку, поэтому, когда она не нашла «А1», потому что это символ, она просто находит «А».'вот почему он вернул'? ', возможно ли, если я использую строку n, просто прочитал первый символ, который является' A 'в строке?

Ответы [ 7 ]

4 голосов
/ 19 января 2012

Прежде всего, вам необходимо добавить элементы в словарь с помощью метода Add () .

Во-вторых, ключом вашего словаря является строка, поэтому вам нужно использовать строку в качестве индекса ... вы можете получить строковое представление char, вызвав ToString() в экземпляре char.

char ch = 'x';

private Dictionary<string, bool[]> letterData = new Dictionary<string, bool[]>();
letterData.Add(ch.ToString(), new []{true, false});

bool[] data = this.letterData[ch.ToString()];

Или измените индекс на char:

char ch = 'x';

private Dictionary<char, bool[]> letterData = new Dictionary<char, bool[]>();
letterData.Add(ch, new []{true, false});

bool[] data = this.letterData[ch];
2 голосов
/ 19 января 2012
bool[] data = this.letterData[ch.ToString()];
1 голос
/ 20 января 2012

Чтобы преобразовать символ в строку, можно вызвать ToString().Это решение вопроса.

Но гафижан работал над какой-то программой, для которой он задал вопрос , где он преобразовал Dictionary<char, bool[]> в Dictionary<string, bool[]>.Теперь он сохранял данные из словаря в текстовый файл примерно так:

A1:001110000111100001010100

Теперь, читая его, ему нужна была только часть A1, поэтому функция Split сделала свое дело.enter image description here

1 голос
/ 19 января 2012

ОБНОВЛЕНО

Попробуйте это:

if(this.letterData.ContainsKey(ch.ToString()))
    bool[] data = this.letterData[ch.ToString()]; 

или

if(this.letterData.ContainsKey(ch.ToString()))
    bool[] data = this.letterData[ch+""]; 
0 голосов
/ 19 января 2012

Попробуйте следующее:

char charString = 'a';
if (letterData.ContainsKey(charString.ToString()))
{
    // Found
}
0 голосов
/ 19 января 2012

переменная ch, скорее всего, символ, который вы должны использовать вместо строки

0 голосов
/ 19 января 2012

Как насчет перехода на:

string sCh = ch.ToString();
bool[] data = null;
if (this.letterDate.ContainsKey(sCh)
{
   data = this.letterData[sCh];
}

Кроме того, вы можете вместо этого заменить ключ в словаре на Char.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...