Проблемы с if и else if, c # - PullRequest
0 голосов
/ 22 января 2012

Я пытаюсь создать программу, которая конвертирует японские иероглифы в английские, но у меня странная проблема, и я не могу понять, как ее решить, хотя я и выяснил, что ее вызвало.

Я использую набор данных и использую этот код для преобразования символов

Моя проблема в том, что он не хочет конвертировать определенные символы, а символы, которые он не хочет конвертировать, основаны на том, что я здесь установил:

// Sets fromtype to the type the character(s) currently is/are
string fromtype = "";
if (CharacterTable.Select("Romaji like '%" + character + "%'") != null)
{
    fromtype = "Romaji";
}
else if (CharacterTable.Select("Hiragana like '%" + character + "%'") != null)
{
    fromtype = "Hiragana";
}
else if (CharacterTable.Select("Katakana like '%" + character + "%'") != null)
{
    fromtype = "Katakana";
}

Если я изменю каждую отдельную строку на «если», то она не захочет распознавать символы ромадзи, если я установлю ее на «иначе, если», как сейчас, она увидит.

Вот полный код:

DataSet CharacterDatabase = new DataSet();
DataTable CharacterTable = CharacterDatabase.Tables.Add();

//-- Add columns to the data table
CharacterTable.Columns.Add("Romaji", typeof(string));
CharacterTable.Columns.Add("Hiragana", typeof(string));
CharacterTable.Columns.Add("Katakana", typeof(string));

//-- Add rows to the data table
CharacterTable.Rows.Add("a", "?", "?");

// Sets fromtype to the type the character(s) currently is/are
string fromtype = "";
if (CharacterTable.Select("Romaji like '%" + character + "%'") != null)
{
    fromtype = "Romaji";
}
else if (CharacterTable.Select("Hiragana like '%" + character + "%'") != null)
{
    fromtype = "Hiragana";
}
else if (CharacterTable.Select("Katakana like '%" + character + "%'") != null)
{
    fromtype = "Katakana";
}

// generates a new variable to store the return in
DataRow[] filteredRows = CharacterTable.Select(fromtype + " like '%" + character + "%'");

// Return the converted character in the requested type
foreach (DataRow row in filteredRows)
{
    if (RequestedCharType == 1)
    {
        return row["Romaji"].ToString();
    }
    if (RequestedCharType == 2)
    {
        return row["Hiragana"].ToString();
    }
    if (RequestedCharType == 3)
    {
        return row["Katakana"].ToString();
    }
}

// if it couldn't find the character, return the original character
return character;

Ответы [ 2 ]

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

Предполагается, что DataTable.Select () возвращает нулевое значение, если совпадений нет.Это не так, он возвращает пустой массив.Ваш тест должен выглядеть так:

 if (CharacterTable.Select("blabla").Length > 0) { // etc.. }
0 голосов
/ 22 января 2012

Необходимо учитывать, что происходит, если персонаж соответствует нескольким типам.Возможно, что независимо от if или if else, вы выберете fromtype, у которого нет результата сопоставления в базе данных.

Вы можете рассмотреть какой-нибудь механизм подсчета очков, где вызапрашивать каждый тип, и если символ соответствует нескольким типам, вы учитываете, какие типы имеют доступные замены.

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