none
配列の要素を検索して最初に見つかった要素のインデックスを返す RRS feed

  • 質問

  • お世話になります。
    質問させてください。PC OSはWindows8.1 しようVBバージョンはVS Express 2013 for Desktop です

    下記のサイトで勉強していて配列の部分で表示確認するためのいろいろ試していますができません。掲示板にも質問していますが回答がありません

    http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard27.htm

    下記の記述を確認するためにプロシージャ―は何を使って(ListBox?TextBox?)表示させてMsgBoxで確認しようとしますが表示できません。表示の仕方をお教えください。またMsgBoxの引数は?

    よろしくお願いいたします。


    Dim States(5) As String
    Dim Index As Integer
    Dim LastIndex As Integer
    Dim NoneIndex As Integer
    States(0) = "カリフォルニア"
    States(1) = "テキサス"
    States(2) = "ニューヨーク"
    States(3) = "ニューヨーク"
    States(4) = "カリフォルニア"
    States(5) = "ミシシッピ"

    Index = Array.IndexOf(States, "ニューヨーク") '2を返します。

    LastIndex = Array.LastIndexOf(States, "カリフォルニア") '4を返します。

    NoneIndex = Array.LastIndexOf(States, "兵庫") '-1を返します。

    2015年6月4日 1:02

回答

  • MsgBoxに関しては以下を参考にして下さい。

    メッセージボックスを表示する
    http://dobon.net/vb/dotnet/form/msgbox.html

    しかし、値の確認はいちいちMsgBoxで表示するのではなく、Visual Studioのデバッグ機能を用いるのが普通です。
    以下はVisual Studio 2010に関するデバッグについての記事ですが、基本は同じですので一度ご覧下さい。

    連載:Visual Studioデバッグ手法
    第1回 Visual Studio 2010のデバッグ機能をまとめる
    http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_01/vsdebug_01_01.html

    さて、配列をセットした後にブレークポイントを設定し、デバッグ実行すれば、実行が一時的にそこで停止します。その際に、マウスカーソルをその配列の変数に合わせると配列の長さ(Length)が表示されます。そして、その配列をクリックすると、その配列の中身が全て表示されます。おそらくこれが一番手っ取り早い方法ですが、他にも「ローカル」ウインドウで変数の中身を確認したり、「イミディエイト」ウインドウで任意の変数を表示することなどで確認することもできます。

    いずれにしてもデバッグ技術はプログラミングにおいて極めて重要ですので、しっかりとVisual Studioのデバッグ機能を使いこなせるようになることをお勧めします。

    (追記)
    SurferOnWwwさんの書き込みを読みました。プログラミングは論理立てて行います。ご質問も論理立て、一つずつ確実に理解して区切りを付けながら、前に進むことをお勧めします。また、リンク先の掲示板に、このMSDNフォーラムでも質問していることを追記するようにした方が良いでしょう。そうしないと、リンク先の掲示板で折角回答して下さった人の労力が無駄になる可能性があります。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2015年6月4日 1:35
    モデレータ

すべての返信

  • 先に質問者さんが立てた別のスレッド(URL 下記)で、私が「MsgBox を配置して、それで確認してはいかがですか?」と回答したのに対して、質問者さんは「わかりました。MsgBoxで確認します.ありがとうございます。できました」と返答していますが?

    https://social.msdn.microsoft.com/Forums/ja-JP/2b37dd55-50ca-45cd-9960-4e4537e0897a?forum=vbgeneralja

    それとは何か違うのか書いてください。また、「できません」というだけでなく、具体的に、○○○という結果を期待して、△△△のようにしたが、実際の結果は×××になったというように書いてください。


    以下、先にも書いたことですが・・・

    #デバッガを使えるようになることは開発を行ううえでホントに重要なことです。今回はとりあえず MsgBox で確認するとしても、デバッガの使い方は勉強されることをお勧めします。デバッガが使えなければ開発はできないと言っても過言ではありません。

    #ご自分が立てたスレッドは、最終的にどのように解決できたのかをきちんと書いていただき、ご自分で役に立った回答にチェックマークを付けて(複数加)、クローズしていただくようお願いします。(質問者さんが以前立てた 2 件のスレッドは、管理者の方がクローズしています。)

    2015年6月4日 1:19
  • 下記のように記述しましたが何も表示されません

     Private Sub ListBox1_Click(sender As Object, e As EventArgs) Handles ListBox1.Click
            Dim States(5) As String
            Dim Index As Integer
            Dim LastIndex As Integer
            Dim NoneIndex As Integer

            States(0) = "カリフォルニア"
            States(1) = "テキサス"
            States(2) = "ニューヨーク"
            States(3) = "ニューヨーク"
            States(4) = "カリフォルニア"
            States(5) = "ミシシッピ"

            Index = Array.IndexOf(States, "ニューヨーク") '2を返します。

            LastIndex = Array.LastIndexOf(States, "カリフォルニア") '4を返します。

            NoneIndex = Array.LastIndexOf(States, "兵庫") '-1を返します。
        End Sub
        Dim States(5) As String
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            MsgBox(States("ニューヨーク"))

    End Sub

    2015年6月4日 1:30
  • MsgBoxに関しては以下を参考にして下さい。

    メッセージボックスを表示する
    http://dobon.net/vb/dotnet/form/msgbox.html

    しかし、値の確認はいちいちMsgBoxで表示するのではなく、Visual Studioのデバッグ機能を用いるのが普通です。
    以下はVisual Studio 2010に関するデバッグについての記事ですが、基本は同じですので一度ご覧下さい。

    連載:Visual Studioデバッグ手法
    第1回 Visual Studio 2010のデバッグ機能をまとめる
    http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_01/vsdebug_01_01.html

    さて、配列をセットした後にブレークポイントを設定し、デバッグ実行すれば、実行が一時的にそこで停止します。その際に、マウスカーソルをその配列の変数に合わせると配列の長さ(Length)が表示されます。そして、その配列をクリックすると、その配列の中身が全て表示されます。おそらくこれが一番手っ取り早い方法ですが、他にも「ローカル」ウインドウで変数の中身を確認したり、「イミディエイト」ウインドウで任意の変数を表示することなどで確認することもできます。

    いずれにしてもデバッグ技術はプログラミングにおいて極めて重要ですので、しっかりとVisual Studioのデバッグ機能を使いこなせるようになることをお勧めします。

    (追記)
    SurferOnWwwさんの書き込みを読みました。プログラミングは論理立てて行います。ご質問も論理立て、一つずつ確実に理解して区切りを付けながら、前に進むことをお勧めします。また、リンク先の掲示板に、このMSDNフォーラムでも質問していることを追記するようにした方が良いでしょう。そうしないと、リンク先の掲示板で折角回答して下さった人の労力が無駄になる可能性があります。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/


    2015年6月4日 1:35
    モデレータ
  • 今気が付きましたが。

    > 掲示板にも質問していますが回答がありません

    掲示板とは以下の URL のページのことですよね。投稿日時 2015/6/4 09:11:25 では「回答がありません」という表現が適切ではないのはわかりませんか?

    http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=22830

    結果的、マルチポストになってしまってますよ。マルチポストは歓迎されないと言うことは理解していますか?


    プログラムの勉強もいいですけど、ネットのマナーの勉強も平行してされることをお勧めします。
    • 編集済み SurferOnWww 2015年6月4日 1:42 一部追記
    2015年6月4日 1:38
  • MsgBoxに関しては以下を参考にして下さい。

    メッセージボックスを表示する
    http://dobon.net/vb/dotnet/form/msgbox.html

    しかし、値の確認はいちいちMsgBoxで表示するのではなく、Visual Studioのデバッグ機能を用いるのが普通です。
    以下はVisual Studio 2010に関するデバッグについての記事ですが、基本は同じですので一度ご覧下さい。

    連載:Visual Studioデバッグ手法
    第1回 Visual Studio 2010のデバッグ機能をまとめる
    http://www.atmarkit.co.jp/fdotnet/chushin/vsdebug_01/vsdebug_01_01.html

    さて、配列をセットした後にブレークポイントを設定し、デバッグ実行すれば、実行が一時的にそこで停止します。その際に、マウスカーソルをその配列の変数に合わせると配列の長さ(Length)が表示されます。そして、その配列をクリックすると、その配列の中身が全て表示されます。おそらくこれが一番手っ取り早い方法ですが、他にも「ローカル」ウインドウで変数の中身を確認したり、「イミディエイト」ウインドウで任意の変数を表示することなどで確認することもできます。

    いずれにしてもデバッグ技術はプログラミングにおいて極めて重要ですので、しっかりとVisual Studioのデバッグ機能を使いこなせるようになることをお勧めします。

    上記にかかれている事を再度読み返しながら頑張ってみます。ありがとうございました。できるだけ自分で苦しんで解決するようにしますね

    適切なアドバイスに感謝します


    • 編集済み 星 睦美 2015年6月4日 5:30 質問以外の内容を一部削除しました
    2015年6月4日 1:54
  • moriuchi さま よろしく。

    皆さんが仰られる様に、デバッグの習得は重要です。 是非、ご自分のものにして下さい。

    尚、当初のご質問文では答え難いのですが、その後のコードのご提示で、問題点が見えて来ました。

      出来れば、何が問題であるかを探すヒントを質問文章として作って下さい。
      ただ、分らない 出来ない では、何が問題なのか、探し様がありませんから。
      その為に、お使いの環境や、やった事、エラーメッセージの内容等を書かれる事をお勧めします。
      ある意味、言語を初期習得するより、質問文を書く方が難しいかも知れません。

    変数のスコープで検索なされば、以下のものが見付かります。  ご一読を。


    以下のサイトを参照下さい。

    http://homepage1.nifty.com/rucio/main/kiso/Scope.htm
    5.寿命 の章を参照

    https://msdn.microsoft.com/ja-jp/library/dd314343.aspx?f=255&MSPPError=-2147217396
    3-1-6 ローカル変数とメンバ変数 特に スコープ(適用範囲)
    3-1-7 2 種類のローカル変数  *ただし、Static は、良く理解してから使う事!


    [追補]  ちょっと不親切な記述でしたので、追記します。

    ご質問の 配列の要素 や MsgBox 等は表面的な問題で、
    実際には、サブルーチンに定義された変数を外部から扱えない点が、
    問題の根本だと思います。
    これは、プログラムを書いて行く上で、重要な要素・考え方ですから、
    先のデバッグと並んで、 前述のリンクを良く読まれる事をお勧めしました。

    • 回答の候補に設定 星 睦美 2015年6月4日 4:06
    • 編集済み ShiroYuki_Mot 2015年6月4日 4:22 追補を追記
    2015年6月4日 2:20
  • フォーラム オペレーターの星 睦美です。
    moriuchi さん、参考になった回答にマークいただきありがとうございます。

    trapemiya さんが回答のなかでアドバイスされていますように、最初に投稿した掲示板にも回答の内容をお知らせいただければ幸いです。http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=22830

    質問への回答以外にフォーラム ユーザーからいただいた返信は回答を読みやすくするために後ほど削除いたします。
    フォーラムのご利用方法、ヘルプ、回答のガイドラインに関するお知らせ
    フォーラムの利用で不明な点がありましたら「MSDN/TechNet フォーラムへのご意見ご要望」までお知らせください。
    今後ともMSDN フォーラムをよろしくお願いいたします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support





    • 編集済み 星 睦美 2015年6月4日 5:33 リンク
    2015年6月4日 5:10
  • いろいろ参考にさせていただきますね。

    ①LIstBox1をプロシージャに設定して5か国をBoxに表示させてその中のニューヨークをクリックしたら2が返る

    そのように考えていたことが一つです

    もう一つは

    ②TextBoxをプロシージャ―に設定してそこにニューヨークと入力してMsgBoxで2が返る

    という設定でよいのかと思い試したのですが

    ①の方はListBoxに表示できませんでしたので何かが不足していると思います

    ビルドは出ませんが表示ができません

    基本的な記述がまだまだ不足だと思いますので表示ができるようになるまでいろいろやってみます

    目的は表示させることなのでこれに特化します

    いろいろな例題をやっていく上で表示させて確認をしていっています。

    ただ読み流すのではなく実際にプログラムを動かしながら理解したいのですが私のお力ではそこまで行き着いていません

    できるかどうかは時間がかかるかもしれませんのですぐ投稿は無理だと思います。できたらまた報告させていただきます

    デバッグ機能は大事だと思いますのでかならず使いこなせるように頑張ります

    ありがとうございます

    2015年6月4日 5:46
  • お世話になります。

    内容が把握できていませんでした

     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            Dim States(5) As String
            Dim Index As Integer
            Dim LastIndex As Integer
            Dim NoneIndex As Integer

            States(0) = "カリフォルニア"
            States(1) = "テキサス"
            States(2) = "ニューヨーク"
            States(3) = "ニューヨーク"
            States(4) = "カリフォルニア"
            States(5) = "ミシシッピ"

            Index = Array.IndexOf(States, "ニューヨーク") '2を返します。

            LastIndex = Array.LastIndexOf(States, "カリフォルニア") '4を返します。

            NoneIndex = Array.LastIndexOf(States, "兵庫") '-1を返します。
            MsgBox(LastIndex)
        End Sub

    このようにすることでできました。

    ありがとうございます

    2015年6月4日 6:02