C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 「インデックスが配列の境界外です」について


(過去ログ 24 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■10928 / inTopicNo.1)  「インデックスが配列の境界外です。」について
  
□投稿者/ sw (1回)-(2007/12/02(Sun) 16:44:09)

分類:[C#] 

開発環境:Visual C# 2005 Express Edition 8.0.50727.762 (SP.050727-7600)
          Microsoft .NET Framework 2.0.50727

現在関数電卓のプログラムを作ってまして、そのうちの基礎となる四則演算の計算を行う関数において解決できなかった点があったので質問させてください。

以下のコードはその関数の一部です。文字列の引数として受け取ったequationを演算子ごとに分割して数値部分をdivideに、演算子部分をarithに格納しています。
これをコンパイルしてみたところ下のfor文の条件式において
「IndexOutOfRangeExceptionはハンドルされませんでした。 インデックスが配列の境界外です。」
と出てしまいます。エラーメッセージで調べてみたり思い当たることを色々と試してみたのですがC#を始めて2ヶ月足らずの私には見当がつきません。
ご教示いただけると幸いです。

----------------------------------------------------------------------
string[] divide;
string[] arith;
divide = new string[100];
arith = new string[99];
int j = 0;
int i;
for (i = 0; equation[i] != '\0'; i++)
{
        if (equation[i] == '*' || equation[i] == '/' || equation[i] == '%' || equation[i] == '+' || equation[i] == '-')
        {
                divide[j] = equation.Substring(0, i);
                arith[j] = equation[i].ToString();
                equation = equation.Remove(0, i + 1);//divide[i]とarith[i]に代入した分を削除。
                j++;
                i = -1;
        }
}
divide[j] = equation;
arith[j] = "";
----------------------------------------------------------------------


引用返信 編集キー/
■10929 / inTopicNo.2)  Re[1]: 「インデックスが配列の境界外です」について
□投稿者/ Hongliang (213回)-(2007/12/02(Sun) 18:15:37)
Hongliang さんの Web サイト
.NET の String オブジェクトは、\0 で終端されてるわけじゃありません。
Length プロパティを使ってください。

// それともわざわざ自前で \0 を挿入してるのかしらん?
引用返信 編集キー/
■10930 / inTopicNo.3)  Re[2]: 「インデックスが配列の境界外です」について
□投稿者/ επιστημη (700回)-(2007/12/02(Sun) 19:57:16)
επιστημη さんの Web サイト
> .NET の String オブジェクトは、\0 で終端されてるわけじゃありません。
> Length プロパティを使ってください。

っつーわけで:
× for (i = 0; equation[i] != '\0'; i++)
○ for (i = 0; i < equation.Length; i++)

ご参考↓
http://blogs.wankuma.com/episteme/archive/2007/12/02/111386.aspx

引用返信 編集キー/
■10933 / inTopicNo.4)  Re[3]: 「インデックスが配列の境界外です」について
□投稿者/ sw (2回)-(2007/12/02(Sun) 21:15:32)
なるほど文字列の終端は\0ではなかったのですね。無事コンパイルできました。大変わかりやすい回答ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -