2012-01-19 34 views
1

現在、作業中のプログラムからわずか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 [文字列]は' 'いくつかの無効な引数

エラー2引数あり1 ':' char 'から' string 'に変換できません

文字列を使用すると、ロードされた文字列の行全体が返されるため、文字列の最初の文字を返すだけです。

例えば

:データ=のA1:使用文字列は、それが全体の行が返されます場合000001100000000110000000111000000011100000001

が、私はちょうどそれが返すように望んでいる「」

NEW確認されている問題: 私はデータを入力したとき、私はなぜ私は文字列を使用する理由を説明する 'A1'キーにデータを入れて、それはそれがcharであるために 'A1'を見つけることができませんでした、それはちょうど 'A' thats ''を返した理由を見つける、 n文字列の中の最初の文字 'A'を読みますか?変更についてはどのように

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

または

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

エラーの直後です。文字から文字列に変換できません。辞書が必要なのでしょうか? –

+0

私はこの文字列の代わりに文字列 – hafizhans

答えて

1

を文字列に文字を変換するには、ToString()を呼び出すことができます。これが問題の解決策です。

しかし、hafizhansは、questionDictionary<char, bool[]>Dictionary<string, bool[]>に変換したプログラムに取り組んでいました。これを読んでいる間今、彼はテキストファイルに今、この

A1:001110000111100001010100 

のようなものを辞書からのデータを格納して、彼は唯一のでSplit機能は、トリックをした、A1一部を必要としていました。 enter image description here

+0

プログラムに文字が含まれている場合、その問題は外部ファイルからデータをロードするときにのみ発生し、その文字列以降は行全体を読み込むため、出力は認識ボックスに表示されません – hafizhans

+0

そのためには、 var ch = line.ToUpper(); 'do' var ch = line.Split( ':')[0] .ToUpper(); 'btnLoad_Click'関数の内部にあります。 –

+0

ちょうど私が必要なのは、ちょうど.Split()関数です。大変ありがとうございました! – hafizhans

1

はこれを試してみてください言葉代わりにCharとすること。

+0

の代わりにcharを返す必要があるこの関数だけのための文字列であるために辞書が必要でしたこのプログラムは特定の時点で ' – hafizhans

+0

コード –

+0

を更新しました。あなたのコードはエラーなしでうまく動作しますが、残念ながら '?'毎回。私はなぜ私がデータを入力するとき、なぜ私は文字列を使用する理由を説明する 'A1'キーにデータを入れるので、それがcharであるために 'A1'を見つけなかったので、それはちょうど 'A' thatsそれは '?'を返しました。文字列nを使用すると、文字列の最初の文字「A」を読み取ることができますか? – hafizhans

0

:また

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

、あなたは上のキーを変更することを検討したいことがあり

を更新し

+0

プログラムは特定の時点で「指定されたキーが辞書に存在しませんでした」というメッセージが表示されなくなりました。 – hafizhans

+0

Ok。辞書にアクセスする前に、辞書「ContainsKey」があるかどうか確認する必要があります。 –

0

変数chが最も可能性が高いあなたは次のことを試してみてください代わりに

+0

文字列を使用すると、行全体が読み込まれるので、文字列の最初の文字を読み取る方法はありますか? – hafizhans

+0

@hafizhans:その文字で始まる辞書の項目を探したいと思っていますか?それはそのようには機能しません。 –

+0

私はその特定のデータの辞書に 'A1'キーを入力しました – hafizhans

0

を文字列を使用する必要が文字である:

char charString = 'a'; 
if (letterData.ContainsKey(charString.ToString())) 
{ 
    // Found 
} 
4

まず第一に、あなたはAdd() methodで辞書に項目を追加する必要があります。

第2に、辞書のキーは文字列なので、文字列をインデックスとして使用する必要があります。charインスタンスのToString()を呼び出して、文字の文字列表現を取得できます。

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するインデックス変更:

​​
+0

実際にはこのプログラムのほんの一部です、私はちょうどそれらの行にエラーを解決するために行えると思った – hafizhans

関連する問題