こんにちは。いつもお世話になっております。
プログラミングの初心者で、現在VC++でプログラムを作成しています。環境は、OSがWindowsXP、統合環境はVisualStudio2008 Professionalを使用しています。
プログラムの中で配列の代わりにListクラスを使いたいのですが、Listのインデックスを指定して値を代入することができません。MSDNではinsertメソッドでインデックスを指定して挿入ができるように書かれているのですが・・・・・。リストは整数を格納するためのもので、
List<int>^ zangakuList;
と、宣言してメソッドの中では、
zangakuList->Insert(i, item->Money);
のように使用しています。ちなみに、iの代わりに0を設定するとリストの先頭に値が代入されます。
お手数ですが、原因がお分かりの方、よろしくご教授ください。m(_)m
No.2ベストアンサー
- 回答日時:
リストの末尾に順に足すだけなら
zangakuList->Insert(i, item->Money);
ではなく
zangakuList->Add(item->Money);
を使いなさい。
Insertは、リストの先頭に挿入するとか、リストの途中に挿入するなど、末尾以外に挿入する場合のみに使う。
なお
for (i = 0; i < 20; i++)
{
if(banknary[i] == item->Bankn)
{
zangakuList->Insert(i, item->Money); (ここでエラーが発生)
break;
}
}
と言うプログラムは、iがzangakuList->Countより大きい状態でiの位置にInsertしようとするので、ほぼ間違い無く例外が発生する。
例えば、zangakuListが空でスタートし、iが0の時にbanknary[i] == item->Banknが成り立たない場合、Insertが実行されず、zangakuListが空のままになる。
次のループに入り、iが1の時にbanknary[i] == item->Banknが成り立つと、Insertを実行しようとするが、zangakuListが空なので、Insertが許されるのは0の位置のみである。
しかしzangakuList->Insert(i, item->Money);のiは1になっているので「Insertメソッドの第1引数『index』が範囲外である」と言うエラーとなる。
ListのInsertメソッドの第1引数Indexに許されるのは「0以上、Countメンバ以下」である。空のリストは「Countが0」であるので「0以上、0以下」つまり「0」しか許されない。
プログラムを以下のように修正せよ。
for (i = 0; i < 20; i++)
{
if(banknary[i] == item->Bankn)
{
zangakuList->Add(item->Money);
break;
}
}
または
for (i = 0; i < 20; i++)
{
if(banknary[i] == item->Bankn)
{
zangakuList->Insert(zangakuList->Count,item->Money);
break;
}
}
ぶっちゃけ
zangakuList->Insert(zangakuList->Count,item->Money);
は馬鹿臭い。zangakuList->Countを引数にしてInsertする必要はなく
zangakuList->Add(item->Money);
で充分である。
chie65535さん、こんにちは。回答ありがとうございました。御礼が遅くなり申し訳ありません。
教えて頂いた様に、ListオブジェクトにAddしていくやり方でうまくいきました。分かりやすい回答本当にありがとうございました。m(_)m
No.1
- 回答日時:
どのようなコードをお書きになって期待する実行結果と実際の結果にどのような違いがあるのでしょう
全く何も登録されていない ListオブジェクトにInsertメソッドをつかって要素を追加しようとしているのでしょうか
何か例外(エラー)が発生しているのであればその内容も明示しましょう
この回答への補足
こんにちは、redfox63さん。早速の回答ありがとうございました。m(_)m
ご指摘の通り、何も登録されていないListオブジェクトにInsertメソッドを使って要素を追加しようとしています。また、プログラムの実行の際に、
「ArgumentOutOfRangeExceptionはハンドルされませんでした。インデックスは一覧の範囲内になければなりません。パラメータ名: index」というエラーが表示されます。実際のコードは以下のようなものです。
***** Listオブジェクトを作成 *****
zangakuList = gcnew List<int>(20);
***** 条件に合致した場合、Listオブジェクトに要素を追加 *****
for (i = 0; i < 20; i++)
{
if(banknary[i] == item->Bankn)
{
zangakuList->Insert(i, item->Money); (ここでエラーが発生)
break;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
java 文字列の部分一致について
-
サーブレットからJSPの呼び出し...
-
文字列が数字のみで構成されて...
-
0除算の例外処理ができない!!...
-
連続する「\\」をひとつの「\\...
-
VB.NETで16進数が正しいかどう...
-
Javaの例外 IllegalArgumentExc...
-
数字か文字列かを判定する関数
-
getActionCommand() とgetText(...
-
基本的にはないと言われました
-
時間の取得
-
C# マルチスレッドにおける例外...
-
C#の捕捉されない例外処理の対...
-
【JAVA】与えられた金額を貨幣...
-
C# UriFormatExceptionの回避
-
VBA 400エラー 1004エラー
-
ファイルダイアログを開いた時...
-
【JSPがブラウザで表示されませ...
-
エクセルVBAで、条件に一致する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
VB.Net Object型 空かどうか
-
0除算の例外処理ができない!!...
-
VB.NETで16進数が正しいかどう...
-
数字か文字列かを判定する関数
-
例外ってIf文の中に入れますか...
-
C# マルチスレッドにおける例外...
-
スタックオーバーフローとは?
-
String型の日付(2005/11/25)の...
-
Timestamp型への変換について(J...
-
C# UriFormatExceptionの回避
-
VBA Evaluate関数 型が一致しま...
-
ADOによるレコードの追加/更新
-
時間の取得
-
WebClient()以外でネットにアク...
-
C#の捕捉されない例外処理の対...
-
タトゥーや墨を入れる人の共通点
おすすめ情報