tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: 組み合わせ合計検索 つづき
投稿日: 2023/08/17(Thu) 11:10
投稿者魔界の仮面弁士
> お世話になります。
> ↑実行しますと 以下のようになります。

比較すると、追加されているのは、
 Dim 値一覧3 As Integer() = 〜
 探索(1230, 値一覧3)
の 2 か所だけですね。


> このような結果になりますか?
なりません。
手元の VS2010 で新規プロジェクトを用意し、そのまま漏らさず貼りつけてみると
 設定値:590 合計値:587 詳細値:42, 45, 500
 設定値:586 合計値:585 詳細値:25, 60, 500
 設定値:88792 合計値:88792 詳細値:1011, 1245, 1497, 2887, 2994, 3296, 3517, 4101, 4366, 4655, 6290, 6494, 14116, 14823, 17500
 設定値:1230 合計値:1230 詳細値:36, 40, 45, 51, 55, 65, 69, 76, 82, 98, 106, 108, 115, 119, 165
という結果が出力されます。


> No.12102 のロジックをもう一度、現在のフォームにあるプログラムへ貼り付けると
> iの部分でエラーでるので以下のように宣言していました。
なんというエラーが出ているのですか?


>  For i = index To maxIndex
>       '設定値を超えるものは除外した上で、[値]の昇順に並べる
>         Dim ordered As Integer() = (From v In values Where v <= targetValue Order By v).ToArray()
>         Dim i As Integer = 0

いや、なんのためにそんな“破壊工作”を…!?

ループ前にあったフィルタリング(と並び替え)を、わざわざ
ループ内で毎回やりなおす形に書き換えている時点で、まず意味が分からないですし、
何より今のそのコードでは、「For i = index To …」と「Dim i As Integer = …」とで
変数 i が重複して宣言されてしまっているではないですか。
アルゴリズム以前の問題として、文法エラーになってしまいますので、
そもそも実行すらできないはず。


それに、そのループ終端となっている「To maxIndex」の値を求める処理は、
本来の元ソースでは For 文の直前に書かれた
 '探索処理
  Dim maxIndex = ordered.GetUpperBound(0)
という処理であったはずです。(値リストから、余剰データを除去した後の最大Indexを取得)

それなのに、その変数 ordered の宣言さえも、ループの前では無く、
ループ内で「Dim ordered As Integer() = ……」と書かれているわけですよね。
そうなると、maxIndex の算出時点で、変数未定義エラーになってしまうはず。
出鱈目にも程がありすぎて草枯れそう。

いったいどんなコードを書いているのでしょう? (^_^;

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。