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

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

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

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

Q&A

解決済

2回答

3360閲覧

VB.NET 最小値をだしたい。

fffu8

総合スコア37

VB.NET

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

0グッド

1クリップ

投稿2020/03/16 00:46

編集2020/03/16 00:47

data配列のインデックスの最小値をだしたのですが、実行すると0が返ってきてうまくだすことができません。
よろしくお願い致します。

実行結果
最小値は1です。

Module Module1

Sub Main() Dim data As Integer() = {2, 4, 7, 8, 3, 4, 5, 1, 2, 3, 7, 3, 6, 7, 2, 6, 3, 8, 3, 1, 7, 1, 9, 3, 5, 3, 6, 7, 3, 9} Console.WriteLine("最小値は" + CStr(Total(data)) + "です。") Console.ReadLine() End Sub Private Function Total(ByVal number As Integer()) As Integer Dim min As Integer = 0 For i As Integer = 0 To number.Length - 1 If number(i) < min Then min = number(i) End If Next Return min End Function

End Module

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

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

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

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

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

Zuishin

2020/03/16 00:49

min の初期値が 0 だからです。
fffu8

2020/03/16 00:51

0をどうかえればいいですか?
Zuishin

2020/03/16 00:52

本気で聞いていますか?
fffu8

2020/03/16 00:59

Dim min As Integer = 0をどのように変えたらいいかわかりません。
Zuishin

2020/03/16 01:02

0 未満の数値がデータの中に無いので、比較対象が 0 であればそれが最小になるとは思いませんか?
fffu8

2020/03/16 01:08

ありがとうございます。
guest

回答2

0

  • minの初期値が0なので、その後dataの中のいかなる値と比較してもminのほうが小さく、dataの最小値は取れません。minには初期値を入れず

Dim min As Integer
とだけすればOKです。

  • For文に入った時点ではminは初期化されておらず、比較ができません。最初のループでは、比較せず代入だけ行いたいです。なので、For文の冒頭に
If i = 0 min = number(i)   Continue For End If

とでも入れてください。

投稿2020/03/16 01:19

編集2020/03/16 01:20
takeaship

総合スコア129

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

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

workaholist

2020/03/16 09:54

Dim min As Integer と Dim min As Integer = 0 は同じですよね? Integerの初期値は0なので。
takeaship

2020/03/16 10:29

その通りですね。指摘ありがとうございます。 Integerはnull非許容型でしたね。
guest

0

ベストアンサー

vb.net

1Private Function Total(ByVal number As Integer()) As Integer 2Dim min As Integer = 0

の部分でminに先に0を入れているから0より小さい数字が無いために0になります。

0ではなく100位の数字を入れましょう。

今後参考にされるために追加。
他の回答者様の回答で修正

1.既にある値を用いて

vb.net

1Dim min As Integer 2min = number(0)

2.変数の取りうる値を用いる

vb.net

1Dim min As Integer = Integer.MaxValue

プログラムの誤りをざっくり指摘のために100とか65535とか即値を使用してしまいました。反省。
お勧めは2番目が見た目にもすっきり。

投稿2020/03/16 01:08

編集2020/03/16 03:42
MasahikoHirata

総合スコア3747

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

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

Zuishin

2020/03/16 01:13

100 でいいなら 2 でもいいはずです。
MasahikoHirata

2020/03/16 01:17

2では2より小さい数を検索で仮に将来的に3が最小とかにはまたバグが。実際には最大数を指定するのが良いがざっと見て100にしました。なので理想は16ビットとして65535がよいですが。
Zuishin

2020/03/16 01:23

101 が最小になったときにバグが。
MasahikoHirata

2020/03/16 01:31

YAmagNZさん。そうですね。まあバグの原因の特定としてざっくりと回答しましたので。これも勉強。
Zuishin

2020/03/16 03:13

このバグの原因は、「データの最小値より小さい可能性がある値を仮の最小値として定めた」ことです。それは 0 であろうが 100 であろうが 65535 であろうが変わりません。 むしろ 100 や 65535 という無意味で中途半端な値に定めることによって不具合が表面に現れにくくなり、バグが凶悪化します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問