質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

4615閲覧

VB.NETで変数を複数判定する際のif文の書き方で困っています。

rioayaha

総合スコア1

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/08/22 16:35

前提・実現したいこと

プログラミング初心者です。
現在VB.NETで簡単なシステムを開発しています。
if文で整数型の配列(0~3の数字がランダムで入る)を宣言し、その配列の指定した要素数に格納されている数字が全て等しいときにある処理を行いたいです。

発生している問題・エラーメッセージ

・判定する数字のどれかに0が格納されている場合、等しくなくてもTrueの判定になってしまいます。
・配列内の数字が全て等しいにも関わらず、Falseの判定になってしまいます。

このようになってしまう原因と、これと同じ処理を行う場合にもっと良い書き方があれば教えていただきたいです。

該当のソースコード

VB.NET

1 '判定したい配列 2 Dim arr(0 To 4) As Integer 3 4 '指定した数 5 Dim num As Integer = 4 6 7 Dim equ As Boolean = False 8 9 '配列に数字を格納(デバッグのため手動で格納) 10 arr(0) = 3 11 arr(1) = 1 12 arr(2) = 0 13 arr(3) = 1 14 arr(4) = 2 15 16 Select Case num 17 18 Case 2 19 20 If arr(0) = arr(1) Then 21 22 equ = True 23 24 End If 25 26 Case 3 27 28 If arr(0) = arr(1) = arr(2) Then 29 30 equ = True 31 32 End If 33 34 Case 4 35 36 If arr(0) = arr(1) = arr(2) = arr(3) Then 37 38 equ = True 39 40 End If 41 42 Case 5 43 44 If arr(0) = arr(1) = arr(2) = arr(3) = arr(4) Then 45 46 equ = True 47 48 End If 49 50 End Select 51 52 53 '指定した要素数に格納されている数字が全て等しい時 54 If equ = True Then 55 56 '指定した要素の数字が全て等しかったときに行いたい処理 57 58 End If

試したこと

配列内の数字をいろいろと変えてみましたが解決しませんでした。

補足情報(FW/ツールのバージョンなど)

開発環境
VisualStudio 2017
.NET FrameWork 4.6.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

If x = y = z Then という条件式の評価は、まずx = yが評価され結果(真偽値)が返され、次いで真偽値(True=-1/False=0)とzが評価されるためです。

複数の変数が同値であることを条件としたいなら、If x = y AndAlso x = z Thenの様に書きましょう。

ただ今回のケースの場合、先頭の要素と一致するかループしならが確認するべきです。
そうすれば要素数ごとにSwitch文で分岐する必要はなくなります。(=要素数ごとにテストする必要がなくなるということでもあります。)

VB

1For i = 1 To 4 2 If arr(0) <> arr(i) Then 3 equ = False 4 Exit For 5 End If 6Next

さらにLINQを使えば1行で書けます。

VB

1Dim equ = arr.Skip(1).All(Function(v) v = arr(0))

投稿2020/08/22 20:54

draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rioayaha

2020/08/23 08:54

なるほど!Falseで返された0と一致してしまうためif文の中を通過してしまうのですね! 確かにSelect Caseですべての条件を記述する書き方はスマートではないため、教えていただいたFor文での判定を採用させていただきます。 回答していただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問