• 締切済み

VB  FOR~NEXTについて

下記の変数の宣言で、For w As Integer = 1 To 100 のWにチェックが付、デバックできません、考えられる点はどんな事があるのでしょうか? ご教授お願いします。 ' Button4のClickイベントを処理します。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click ' LineData用の変数です。 Dim cadLineData As New zwDrawCAD.LineData ' 線分の始点と終点を参照します。 Dim cadStartPoint As zwDrawCAD.DPoint = cadLineData.Start Dim cadEndPoint As zwDrawCAD.DPoint = cadLineData.End 'とりあえず線のセンターポイントは(100,100)にしてます。 Const X As Integer = 0 'cadStartPoint.x = 100 Const y As Integer = 0 'cadStartPoint.x = 100 Dim sr As System.IO.StreamReader = Nothing Try Dim file As String = TextBox1.Text 'SRとは New System.IO.StreamReaderの略 sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim ansx As Double '計算された、xの座標 Dim ansy As Double '計算された、yの座標 Dim doc As String 'fileの1行 Dim x1 As String '1列目(X) Dim y2 As String '2列目(y)、 Dim x3 As String '3列目(X1)、 Dim y4 As String '4列目(y2) Dim angle As String '5列目(角度)、 Dim spare As String '6列目(予備)、 Dim item() As String ' Dim i As Integer '1行ずつテキストを読み取る doc = sr.ReadLine '1行読む Do Until IsNothing(doc) i += 1 item = doc.Split(",") 'カンマで区切る x1 = item(0) y2 = item(1) x3 = item(2) y4 = item(3) angle = item(4) spare = item(5) f2.data(x1, y2, x3, y4, angle, spare) f2.int(i) TextBox2.Text &= item(0) & " " & item(1) & " " & item(2) & " " & item(4) & " " & item(5) & " " & vbNewLine doc = sr.ReadLine '次の1行を読む Loop f2.println() Catch ex As Exception MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If Dim len As Integer 'TextBox1に入力された線の長さ Dim angle As Double 'TextBox2に入力された角度 単位は度 Dim ansx As Double '計算された、xの座標 Dim ansy As Double '計算された、yの座標 '変数の宣言 Dim w As Integer Dim i As Integer '初期化 w = 0 i = 0 For w As Integer = 1 To 100 len = CDbl("x1" / 2) angle = CDbl(angle + 90) ansx = X + len * (Math.Cos(angle / 180 * Math.PI)) '終点のx座標 ansy = y + len * (Math.Sin(angle / 180 * Math.PI)) '終点のy座標 cadStartPoint.x = ansx * -1 cadStartPoint.y = ansy * -1 cadEndPoint.x = ansx cadEndPoint.y = ansy w = w + 1 Next End Try

みんなの回答

回答No.3

こんにちは お久しぶりです。 だいぶ時間が過ぎてしまいましたので、「時すでに遅し」といった感じでしょうか。 zwDrawCADがどうしてもわかりませんので、かなり無責任な回答です。 少し、修正しました。 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim f2 As New Form2 Dim ar As New List(Of String) '1列目(X)をコレクションにする Dim cadLineData As New zwDrawCAD.LineData ' 線分の始点と終点を参照します。 Dim cadStartPoint As zwDrawCAD.DPoint = cadLineData.Start Dim cadEndPoint As zwDrawCAD.DPoint = cadLineData.End 'とりあえず線のセンターポイントは(100,100)にしてます。 Const X As Integer = 0 'cadStartPoint.x = 100 Const y As Integer = 0 'cadStartPoint.x = 100 TextBox2.Text = "" Dim sr As System.IO.StreamReader = Nothing ' Try Dim file As String = TextBox1.Text 'SRとは New System.IO.StreamReaderの略 sr = New System.IO.StreamReader(file, System.Text.Encoding.GetEncoding("shift_jis")) Dim doc As String 'fileの1行 Dim item() As String '配列にする Dim x1 As String '1列目(X) Dim y2 As String '2列目(y) Dim x3 As String '3列目(X1) Dim y4 As String '4列目(y2) Dim angle As String '5列目(角度) Dim spare As String '6列目(予備) Dim i As Integer 'dataで2次元配列にするためのカウンター '1行ずつテキストを読み取る doc = sr.ReadLine '1行読む Do Until IsNothing(doc) 'ここを変更してます item = doc.Split(",") 'カンマで区切る x1 = item(0) y2 = item(1) x3 = item(2) y4 = item(3) angle = item(4) spare = item(5) f2.int(i) 'Class Form2値を渡す f2.data(x1, y2, x3, y4, angle, spare) 'Class Form2 dataに値を渡す TextBox2.Text &= item(0) & " " & item(1) & " " & item(2) & " " & item(4) & " " & item(5) & " " & vbNewLine doc = sr.ReadLine '次の1行を読む i += 1 'ここを通るたびに1を足す ar.Add(x1) '1列目(X)をコレクションにAddする Loop Dim len As Integer 'TextBox1に入力された線の長さ←テキストファイルの1列目(X) Dim angledouble As Double 'TextBox2に入力された角度 単位は度  '変数が競合するため名前を変更しました。 Dim ansx As Double '計算された、xの座標 Dim ansy As Double '計算された、yの座標 '変数の宣言() Dim w As Integer Dim k As Integer '変数が競合するため名前を変更しました。 For k = 0 To 5 'fileの行が6と仮定 (6列6行) For w = 0 To 99 len = CDbl(ar(k) / 2) 'ar(k)は1列目(X)の値です angledouble = CDbl(angledouble + 90) ansx = X + len * (Math.Cos(angledouble / 180 * Math.PI)) '終点のx座標 ansy = y + len * (Math.Sin(angledouble / 180 * Math.PI)) '終点のy座標 cadStartPoint.x = ansx * -1 cadStartPoint.y = ansy * -1 cadEndPoint.x = ansx cadEndPoint.y = ansy w = w + 1 Next Next Catch ex As Exception '各変数が適用範囲外になりますので、ここに移動しました。 MessageBox.Show(ex.Message, "read") Finally If sr IsNot Nothing Then sr.Close() sr.Dispose() End If End Try f2.println() 'PictureBoxに表示するメソッド f2.Show() 'Form2をShowする End Sub わからない場合の方法 1.むりをして頑張る。 2.あきらめる。 私は2.「あきらめる」をお勧めします。 1.「むりをして頑張る」は意欲の低下や体調不良につながりますね。 「あきらめる」といっても、単純にあきらめるのではありません。 「あきらめる」とは #時間をおく 次の日にもう一度プログラムを見直すと前日にはわからなかったエラーの原因がすんなりわかったりします。 別の方法でプログラムできるのなら、エラーのでるところを削除して別の方法でプログラムしてしまいましょう。 #人に聞く 解決できない場合は人に聞くしかありません。 「人」といっても実際の知り合いばかりではなく、インターネットや本・雑誌なども含みます。 このサイトも「人に聞く」にあたります。どんどん活用しましょう。 はじめは理解できない部分が多いと思いますが、その場合はコピペできるように、回答者さんにお願いしましょう。 そのうち、理解できるようになります。 だいぶ、日にちが過ぎていますので、別スレッドで再質問してもいいですね。 わからないときは、気軽に質問してね。

すると、全ての回答が全文表示されます。
  • digitalian
  • ベストアンサー率29% (323/1104)
回答No.2

'変数の宣言 Dim w As Integer Dim i As Integer '初期化 w = 0 'ここでwを0にしておきながら i = 0 For w As Integer = 1 To 100 'ここでまたwを1で定義しなおしているのが変。 len = CDbl("x1" / 2) angle = CDbl(angle + 90) ansx = X + len * (Math.Cos(angle / 180 * Math.PI)) '終点のx座標 ansy = y + len * (Math.Sin(angle / 180 * Math.PI)) '終点のy座標 cadStartPoint.x = ansx * -1 cadStartPoint.y = ansy * -1 cadEndPoint.x = ansx cadEndPoint.y = ansy w = w + 1 'この行は要らない。 Next やるならこうです。 × For w As Integer = 1 To 100 ◯ For w = 1 To 100

すると、全ての回答が全文表示されます。
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

For ループの数行前で、wを定義し、0で初期化しているのに、 For 文で、 As Integer で再定義していますが、これは、故意ですか? また、Forループの中で、w=w+1とカウントアップしていますが、これも故意ですか? For ループの変数をw以外にしたら、どうなりますか?

すると、全ての回答が全文表示されます。

専門家に質問してみよう