アプリ版:「スタンプのみでお礼する」機能のリリースについて

Visual Basic初心者です。
Visual Studio 2005を使って、九九表を表示させるプロジェクトを作りたいのですが、
For Nextステートメントを使うところまではわかりましたが、
Labelに表示させると繰り返した最終の値(2の段だと、18)しか表示されません。

途中の数字(×1~8まで)を表示させるには、どうすればいいのか教えてください。私の組んだタグは以下の通りです。よろしくお願いします。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim a, b, c, d, f, g, h, i, j As Integer

For a = 1 To 9
Label1.Text = 1 * a
For b = 1 To 9
Label2.Text = 2 * b
For c = 1 To 9
Label3.Text = 3 * c
For d = 1 To 9
Label4.Text = 4 * d
Next
Next
Next
Next

End Sub

A 回答 (5件)

Dim Hyou As String = ""


Dim q1,q2 As Integer
For q1=1 to 9
For q2=1 to 9
Hyou = Hyou & (q1*q2) & " "
Next
Hyou = Hyou & vbCrlf
Next

もっとスマートに書きましょう
    • good
    • 2

No1です。


>ステートメントは1番最初に試しました。
>ただ、これだとやはり81になってしまったので、
>1の段、2の段、と分けなければいけないのかと思い、
>最初の投稿の式にしました。
>確かに、途中結果を表示させることができれば、
>段を分ける必要はありませんね

その途中結果を表示させる方法を気づいてほしかったのですが…。
なぜ最後の結果だけでるか・・・。
上書きされちゃうからですよね。

上書きされないように記述すればいいんですよ??

たとえば、99だったら81個結果があるわけで、
81個のSTRING配列に格納してあげてもいいですし、

Lable1.text = Label1.text + ”結果”
というふうに、追記してあげてもいいでしょ??
そこに気づいてほしかっただけです。

どういう出力にしたいかの記載が不明瞭であったのですが、

たとえば、
1*1=1, 1*2=2, ・・・・・1*9=9 改行
2*1=2・・・・
としたいなら、

Dim i As Integer
For a = 1 to 9
For b = 1 to 9
i = a*b
Label1.text = Label1.text + a.ToString + "*" + b.ToString + "=" + i.ToString + ", "
// b=9の結果のあとに改行挿入
if b=9 then
Label1.Text += "\r\n"
Endif
NEXT
NEXT

VBはあんまり覚えてないので正しい記法かわかりませんが(^▽^;)
    • good
    • 0

こんにちは


Visual Studio 2005を持っていません。下記は、まったくの想像で組んでみました。 こんな一例もあるということで何かの参考にしてください。 見直してみると表示部分がダサいですね。 もっと、スマートな回答を考えてください。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer '段のループ変数
Dim j As Integer 'ステップのループ変数
Dim strtemp As String' 段のステップを保存する

 Let strtemp = ""
 For i = 1 To 9
  For j = 1 To 9
  Let strtemp = strtemp + str(i * j)' +符号が空白1個分の間隔を作ってくれることを期待
  Next j
  Select Case i
   case 1: Label1.Text = strtemp
   case 2: Label2.Text = strtemp
   Case 3: Label3.Text = strtemp
   Case 4: Label4.Text = strtemp
   Case 5: Label5.Text = strtemp
   Case 6: Label6.Text = strtemp
   Case 7: Label7.Text = strtemp
   Case 8: Label8.Text = strtemp
   Case 9: Label9.Text = strtemp
   Case Else
    Stop
  End Select
  Let strtemp = ""
 Next i
End Sub
    • good
    • 0
この回答へのお礼

投稿ありがとうございます。

今使っているPCにはVisual Studioが入っていませんので、後でA88No8さんに組んでいただいた文で試してみます。

str関数?についてはまだまだ無知で、msdnで調べても、いまいちピンときませんでした…「数字を文字として扱う」ということでいいのでしょうか?

また、結合の際の「+」は空白は作ってくれないと思います。が、その際はダブルクウォテーション″″マークで囲えば作れると思いますので、それも試してみますね^^

お礼日時:2009/06/09 01:33

追記ですが、



このループって99計算になってないですよね。
4の段を何度も計算してますよね。
For d = 1 To 9
Label4.Text = 4 * d
Next
このループが9の3乗回も…。

単純に九九計算なら

For a = 1 to 9
For b = 1 to 9
結果 = a * b
NEXT
NEXT
でいいんじゃない?
    • good
    • 0

ヒント



For d = 1 To 9
  Label4.Text = 4 * d
Next

これだと、dが1~9までループしますが、
d=1のとき
Label4.text = 4 * 1
となり、
Label4には4が入ります。

次に、d=2のとき
Label4.text = 4 * 2
となり、
Label4には8が入ります。

d=9でループを抜けるわけですから、
Label4には36が入った状態でループから抜けます。

原因??(わかったと思いますが)
Labelには常に最新の計算結果を上書きしてしまっているから!

どうすればいいかは、自分で考えたほうがよいかと思います。
    • good
    • 0
この回答へのお礼

投稿ありがとうございます。
変数が9になった時にループを抜けるから×9の答えしか表示されない ということはわかるのですが、ループ途中の答えの表示の仕方がわかりません・・・
「&=」を使うのかな?と考えてみてはいるのですが・・・

また、
For a = 1 to 9
For b = 1 to 9
結果 = a * b
NEXT
NEXT

のステートメントは1番最初に試しました。ただ、これだとやはり81になってしまったので、1の段、2の段、と分けなければいけないのかと思い、最初の投稿の式にしました。

確かに、途中結果を表示させることができれば、段を分ける必要はありませんね。

お礼日時:2009/06/09 01:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!