スレ立てるまでもない質問はここで 160匹目

■ このスレッドは過去ログ倉庫に格納されています
2022/05/10(火) 14:24:35.29ID:+9FnNLoT
この板はプログラムを作る人のための板です。
あらゆる質問はまず
スレ立てるまでもない質問はここで
スレにしてください。

次スレは>>980が立てること

【前スレ】
スレ立てるまでもない質問はここで 159匹目
https://mevius.5ch.net/test/read.cgi/tech/1644673480/
512デフォルトの名無しさん
垢版 |
2022/07/26(火) 23:31:05.10ID:MJpCL8rD
>>510
すみませんよくわかりません
" "を消すことで点数は出るようになったのですが
textboxに何も入力出来ずにボタンを押すと今度は5点が出るようになってしまいました

また数値の差(textboxとlabelの差が10以内ならAを表示20より上ならBを表示)などはどうすればいいのでしょうか
2022/07/26(火) 23:31:14.00ID:khPn0eWd
>>511みたいなRubyガイジは消えてねw
Rubyなんてもう仕事では使われなくなっている訳だがw
2022/07/26(火) 23:45:37.56ID:SFGiBpCo
>>512
イベント駆動、制御構造、文字列と数値の違いもわかってないみたいだから、前の単元を見直して再勉強して下さい。
2022/07/26(火) 23:52:00.61ID:EFLNvNJ6
>>512
次は文字列から数値に変換してから比較
VBだと思うが文字列比較してるから大小比較には使えない

入力できない件はTextコントロールのEnableプロパティがFalseにでもなってるんだろ
2022/07/26(火) 23:53:31.94ID:SFGiBpCo
数値の差は引き算と絶対値を使えば得られる。
その前に文字列を数値に変換する必要がある。
517デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:18:54.56ID:nNmP47B2
>>515
>>516
数値の変換はinp1=Val(textbox.text)で正しいのでしょうかそれともIf Val(inp1) = Label1.Text Then でも大丈夫ですか?
あとtext boxに何も入力出来ずにではなくしずにでしたすみません
2022/07/27(水) 00:25:27.19ID:LZk+uw73
変数には型があって、As Stringと書いた変数は文字列型になる。数値を文字列型の変数に代入することはできない。
式にも型がある。
2022/07/27(水) 00:31:01.68ID:LZk+uw73
文字列型と数値型の比較は、、、やらん方がいいな。
520デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:35:28.64ID:RpXAKi4d
>>518
Dim inp1 As integer
にするということですか?
2022/07/27(水) 00:38:41.47ID:LZk+uw73
Label1.Textは文字列型だね。
522デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:50:16.57ID:L+cMx9Xr
>>521
すみませんわからないので
>>508のどこが間違っているか具体的に教えてくれませんか?
2022/07/27(水) 00:52:50.73ID:LZk+uw73
>>522
何がしたいのかさっぱりわからん。
日本語でプログラムを書いてくだされ。
2022/07/27(水) 00:56:01.02ID:LZk+uw73
Label1は何に使うのか
TextBox1は何に使うのか
525デフォルトの名無しさん
垢版 |
2022/07/27(水) 00:58:25.68ID:vjLtCyiu
>>523
>>508に書いてある通りtextboxに入力された数値とlabelに出るランダムな数値を比較してlabel2に表示させたいです
2022/07/27(水) 01:06:32.36ID:LZk+uw73
ランダムな数値をValue1に代入する。
Label1にValue1を文字列にしたものを格納する。
TextBox1の文字列を数値にしたものを変数Value2に代入する。
Value1とValue2を比較する。
Value1 > Value2なら「大きいです」という文字列を(以下略)
2022/07/27(水) 01:13:48.04ID:LZk+uw73
Value1, Value2という2つの変数が必要。
ランダムな数字を表示するのはいつ? ボタンを押したとき?
2022/07/27(水) 01:18:20.56ID:LZk+uw73
複数回比較するので、変数に代入せずに変換する式をそのまま書くのは冗長。
529デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:20:57.98ID:MwlsM79e
>>526
cstrではダメということですか?
2022/07/27(水) 01:22:57.37ID:LZk+uw73
>>529
文字列比較と数値比較は、少し違うんだな~、これが。

"124" > "1234"
531デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:23:03.27ID:dBfhXkJs
>>527
ボタンを押した時です
532デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:28:33.91ID:8iD3kOwS
今の状態ではlabelもtextboxも変数にはなっていないということですか?
2022/07/27(水) 01:29:37.99ID:LZk+uw73
日本の情報教育では、出題者の意図を推し測るのが義務化されているので、問題がLabel2への格納を暗に要求しているのであれば、そのように書かなければならない。

問題文はどうなってる?
2022/07/27(水) 01:31:05.90ID:LZk+uw73
フォームでLabel1を配置したのであれば、Label1.Textは文字列変数として使える。
535デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:33:27.91ID:9eouHVow
>>533
スロットを使って2桁の整数を作る
・ 入力欄に 99 以下の整数を入力して、「判定」ボタンを押すと、入力された数値とスロット
の数値を比較して、その差によって以下に示すような点数が表示されるゲーム
・ 「判定」ボタンと「終了」ボタン、数値の入力欄、スロット表示欄、得点表示欄の5つは必
ずつけること。
・ 入力欄とスロット、得点のクリアボタンを作る(クリアの状態は自由に設定して OK)
・ コードには、意図が伝わるようにコメントを書き入れる
<点数と条件>
・ 2 つの数値が一致したら、100 点をフォーム上に表示
・ 一致していないが、2 つの数値の差が 10 以内だったら 10 点をフォーム上に表示 ・ 2 つの数値の差が 10 より大きく 20 より小さかったら5点をフォーム上に表示 ・ 2 つの数値の差が 20 以上だったら 0 点をフォーム上に表示
こんな感じです
2022/07/27(水) 01:35:03.65ID:D3U44Pck
リテラルとカフェラテ
おいしいのはネスカフェ
537デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:38:13.06ID:fjgr5dHm
>>534
その文字列変数を数値に代入してから比較するということですか?
2022/07/27(水) 01:39:32.12ID:LZk+uw73
わかってないようだが、VBでは日本語変数名・日本語コントロール名が使えるはずだ。

まず、フォームに何を配置する?
ボタン、ラベル、テキストボックスの三種のコントロールが使える。

ユーザーはラベルには入力できない。
ユーザーはテキストボックスに文字列を入力できる。
2022/07/27(水) 01:42:52.40ID:LZk+uw73
「判定」ボタン、
「終了」ボタン、
「数値入力」テキストボックス、
「スロット表示」ラベル、
「得点表示」ラベル。
これでいこう。
540デフォルトの名無しさん
垢版 |
2022/07/27(水) 01:43:55.82ID:YSkUdWVs
>>539
それは既に配置しています
2022/07/27(水) 01:49:59.36ID:LZk+uw73
Dim 値1 As Integer
Dim 値2 As Integer
Dim 差分 As Integer
値1 = Int(Rnd()*99)
スロット表示.Text = CStr(値1)
値2 = Val(数値入力.Text)
差分 = Abs(値1 - 値2)
2022/07/27(水) 01:51:03.95ID:LZk+uw73
スロットっていうことは、タイマー使ってクルクル回した方がいいのか?
2022/07/27(水) 01:58:07.37ID:LZk+uw73
フォームにタイマーを配置。

フォームが初期化されるときに0.33秒間隔のタイマーを起動。
タイマーイベントが発生したら、スロットの文字列をランダムな数字で更新。
2022/07/27(水) 01:59:20.33ID:LZk+uw73
判定ボタンを押したらタイマーを停止。
終了ボタンを押したらフォームを閉じる。
2022/07/27(水) 02:00:55.62ID:LZk+uw73
待てよ、スロットは規則正しく動かすべきか、それともランダムに変えるべきか。
546デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:02:44.06ID:qI+Uo5vp
>>541
 Dim inp1 As Integer
Dim inp2 As Integer
Dim inp3 As Integer

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

  inp1 = Label1.Text
inp2 = Val(TextBox1.Text)
inp3 = Val(inp1 - inp2)
inp1 = CStr(Int(Rnd() * 99))

ということで大丈夫ですか?
2022/07/27(水) 02:05:27.70ID:LZk+uw73
>>546
それならinp1は整数でTextBox1.Textは文字列となる。
整数変数に文字列を代入するのはおかしい。
2022/07/27(水) 02:10:07.62ID:LZk+uw73
>>546
代入文は順序が大事。ランダムな値を求めるのが先。
549デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:10:38.30ID:kUpgZ120
>>547
この状態だとinp2 = Val(TextBox1.Text) は
>>541の値2とは書いてあることは同じではないのですか?
550デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:12:35.54ID:kUpgZ120
>>548
つまり

Label1.Text = CStr(Int(Rnd() * 99))
inp1 = Label1.Text
inp2 = Val(TextBox1.Text)
inp3 = Val(inp1 - inp2)
ということですか?
2022/07/27(水) 02:13:43.00ID:LZk+uw73
>>550

> inp1 = Label1.Text

文字列を整数変数に代入できない。
552デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:16:20.29ID:kUpgZ120
>>551
なので>>541みたく分けないといけないということですか?
2022/07/27(水) 02:17:47.50ID:LZk+uw73
>>552
文字列を整数にしたものを返す関数があるから、それを使う。
2022/07/27(水) 02:20:59.51ID:LZk+uw73
スロットマシンのような動作を期待しているのであれば、タイマーを使ってクルクル回す必要がある。なんなら音を出して、カジノのような演出も必要かも知れない。
出題者の意図をよく理解するんだ。
555デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:22:17.13ID:kUpgZ120
>>553
inp1 = Label1.Text
inp2 = Val(TextBox1.Text)
inp3 = Val(inp1 - inp2)
inp1 = CStr(Int(Rnd() * 99))
それがこの状態だとまだ出来ていませんか?
その関数はintとはまた別なのですか?
556デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:23:41.61ID:kUpgZ120
>>554
基礎レベルなので多分それは大丈夫だと思います
2022/07/27(水) 02:24:32.42ID:LZk+uw73
inp1 = Label1.Text
の左辺は整数変数。右辺は文字列。
型の不一致。

inp1 = CStr(Int(Rnd() * 99))
の左辺は整数変数。右辺はCStrの値なので文字列。
型の不一致。
2022/07/27(水) 02:26:47.85ID:LZk+uw73
CIntかValを使えば文字列を数値に変換できる。
2022/07/27(水) 02:29:56.55ID:LZk+uw73
あとはいくつかのIf文で差を比較し、場合分けして得点表示.Text に適当な文字列を代入すればいい。
560デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:32:21.15ID:hUPssU1v
>>558
inp1 = Val(Int(Rnd() * 99))
Label1.Text = CStr(inp1)
inp2 = Val(TextBox1.Text)
inp3 = Val(inp1 - inp2)
こういうことですか?
2022/07/27(水) 02:33:05.88ID:LZk+uw73
絶対値を求める関数はAbs
562デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:36:13.30ID:hUPssU1v
>>561
Absは宣言されていないと出てしまいます
2022/07/27(水) 02:37:16.50ID:LZk+uw73
System.Math.Abs
564デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:41:06.00ID:QfftK3Ne
>>563
すみませんそれだけ書かれてもよくわかりません
2022/07/27(水) 02:41:25.80ID:LZk+uw73
廃止予定のVB.netを教材に使うなんて学校はひどいことをしますなあ。
2022/07/27(水) 02:43:48.59ID:LZk+uw73
inp3 = System.Math.Abs(inp1 - inp2)
567デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:46:02.40ID:mBvV44nn
>>566
ありがとうございます
568デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:48:16.34ID:mBvV44nn
これで前提条件は完成ということで大丈夫なのでしょうか?
2022/07/27(水) 02:51:54.76ID:LZk+uw73
>>568
実行してみてエラーが出ない。
そして、二分間画面をにらみつけて、間違いが見つからなければ次に進めばいい。
570デフォルトの名無しさん
垢版 |
2022/07/27(水) 02:57:24.54ID:AEbD6U5/
>>569
エラーは出ませんでした
If inp2 = inp1 Then
Label2.Text = "100点"
ElseIf inp1 > inp2 Then
Label2.Text = "10点"
ElseIf inp1 < inp2 Then
Label2.Text = "5点"

End If
下はこのようなコードなのですがtextboxに何も入力せずにボタンを押すと10点と出てしまいます
また比較の段階ではinpは既にvalで数値化しているのでvalをつけなくても問題ないという認識で間違っていないでしょうか?
2022/07/27(水) 02:58:18.78ID:LZk+uw73
※実行結果が間違いかどうか判定するのは、初心者なら自分自身だが、上級者はテストを自動化できる。
2022/07/27(水) 03:01:09.00ID:LZk+uw73
テキストボックスに何も入れない、ということは.Textが空文字列になる。空文字列をValに渡すとどうなるか?

空文字列かどうか判定する必要があるかも知れない。
2022/07/27(水) 03:02:49.33ID:LZk+uw73
数値化しているものを数値化するとは意味をなさない。
2022/07/27(水) 03:05:17.77ID:LZk+uw73
2つの数値の差がinp3だろ?
575デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:10:08.15ID:jODmrfct
>>574
はい
2022/07/27(水) 03:11:42.49ID:LZk+uw73
>>575
もう一度、判定条件を読み直し。
577デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:11:50.99ID:jODmrfct
自動でデバッグが必要ということもわかるのですが
まず 一致していないが、2 つの数値の差が 10 以内だったら 10 点をフォーム上に表示 ・ 2 つの数値の差が 10 より大きく 20 より小さかったら5点をフォーム上に表示 ・ 2 つの数値の差が 20 以上だったら 0 点をフォーム上に表示
が上手く書けなくて困っています
2022/07/27(水) 03:13:29.52ID:LZk+uw73
そういうときに便利な「数直線」。
数直線を紙に書いて、場合分けを考える。
2022/07/27(水) 03:15:18.50ID:LZk+uw73
絶対値は常にゼロより大きいのでカンタンだね。
2022/07/27(水) 03:17:08.97ID:LZk+uw73
*絶対値は常にゼロ以上なのでカンタンだね。
2022/07/27(水) 03:19:32.96ID:LZk+uw73
If文に複数の条件式を指定したい場合は、AndかOrを使って条件式をつなげる。
582デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:19:51.93ID:yKrJTn5K
>>580
正直遠回しに言われても理解できないので
どこを直したらいいのか直接的に教えてもらえませんか?
If inp2 = inp1 Then
Label2.Text = "100点"
ElseIf inp1 <> inp2 And inp3 = 10 Then
Label2.Text = "10点"
ElseIf inp1 <> inp2 Then
Label2.Text = "5点"
ElseIf inp1 <> inp2 Then
Label2.Text = "0点"
583デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:20:32.16ID:yKrJTn5K
>>581
それはわかります
2022/07/27(水) 03:25:42.03ID:LZk+uw73
答えだけ教えたら勉強にならないでしょう。

2 つの数値の差が 10 以内だったら 10 点をフォーム上に表示

ElseIf Inp3 <= 10 Then
10 点をフォーム上に表示。

2 つの数値の差が 10 より大きく 20 より小さかったら5点をフォーム上に表示

ElseIf 10 < Inp3 And Inp3 < 20 Then
5点をフォーム上に表示

2 つの数値の差が 20 以上だったら 0 点をフォーム上に表示

ElseIf 20 <= Inp3 Then
0 点をフォーム上に表示
2022/07/27(水) 03:27:25.65ID:LZk+uw73
最後に
End If
2022/07/27(水) 03:29:58.17ID:LZk+uw73
フォームに表示が共通しているから、数値の差から得点を返す関数を作れば、コードが合理的になる。
587デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:31:50.09ID:yKrJTn5K
>>584
ありがとうございます
588デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:33:08.65ID:yKrJTn5K
>>586
なるほど
2022/07/27(水) 03:37:40.83ID:LZk+uw73
時間があったら、その得点判定関数の単体テスト用の関数を書いてみろよ。
いくつかの使用例を想定して、2つの数値と得点数の組を記述するんだよ。
590デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:41:16.49ID:yKrJTn5K
>>589
わかりました
夜分遅くまで付き合っていただきありがとうございました
2022/07/27(水) 03:47:12.89ID:LZk+uw73
>>590
サイバー世界に夜はない。人助けをしないとここから脱出できないものでな。しかたなくやってるだけさ。
592デフォルトの名無しさん
垢版 |
2022/07/27(水) 03:56:10.31ID:OAxBWYWr
どんな脱出ゲームなんだよw
2022/07/27(水) 16:11:49.73ID:zAtculQV
単体テストをmockitoを使って書いてますが、一時的なオブジェクトをモックするには
どうしたらいいでしょうか。例えば以下のようなmethod1()をテストするとき
Obj2 method1() {
 Obj1 obj1 = mendo_na_shori();
 return betsu_no_shori(obj1.hoge());
}
mendo_na_shori()は外部APIを呼ばないといけない、あとobj1の初期化にも深入りしたくない
ので、obj1.hoge()が適当な値を返すようにモックしたいのですが
betsu_no_shori()だけテストすればいいようにも見えてしまいますが、例がうまくないということで
2022/07/27(水) 16:29:49.90ID:sRAKzK8I
>>593
obj1を外からパラメータとして渡せるようにする
基本的にモックフレームワークの機能で無理矢理差し替えようとするのは悪手で、そもそもモックしやすい設計にすべき
2022/07/27(水) 16:35:46.22ID:zAtculQV
>>594
なるほど、なんだかテストのためにデザインを変えるようで躊躇していたのですが
むしろそれがいいデザインだったりするということでしょうか
あるいは「テストしやすい」ということを良いデザインの1要件として考えるということでしょうか
2022/07/27(水) 17:17:41.95ID:sRAKzK8I
>>595
その通り
開発作業を合理的に進めることがデザインの大きな目標なのだから、開発作業において重要な位置を占めるテストを前提にデザインを考えるのは当たり前
597デフォルトの名無しさん
垢版 |
2022/07/27(水) 17:53:16.59ID:nrHcrDPL
API作る費用がないから他の会社が作ったシステムのリードレプリカDB見てデータを取ってこいって流れになってるからなんとか阻止したいのですが、有名なアンチパターンとか何かないですかね?
2022/07/27(水) 18:51:26.26ID:5n9aUkym
久々にプログラミング復帰しようとして色々ソース見ようと思ったんだけど
昔存在したkodersとかGoogle Code Searchみたいなソースコード検索エンジンってない?
2022/07/27(水) 18:53:20.17ID:RFLOe/ZA
>>593
セオリーで言うとmethod1が含まれてるクラスのコンストラクタに
mendo_na_shori()を含むクラスのインスタンスを渡す形にしてそいつをモックする

method1がobj1を受け取る形にしたほうがいいかどうかは
純粋にmethod1の責務から考えたほうがいい
2022/07/27(水) 19:24:01.19ID:LZk+uw73
>>598
https://qiita.com/ozackiee/items/ef41501c4e7141d111d8
2022/07/27(水) 19:32:17.60ID:5n9aUkym
>>600
githubで検索も出来んのね
サンキュー
602デフォルトの名無しさん
垢版 |
2022/07/27(水) 20:48:10.95ID:8I1dQN/H
VSCodeでターミナルに文字が流れて行く時に画面がちらちらするんだけど
何が悪いのかな

argv.jsonの disable-hardware-accelarationはtrueにした
603デフォルトの名無しさん
垢版 |
2022/07/27(水) 20:48:27.26ID:8I1dQN/H
VSCodeでターミナルに文字が流れて行く時に画面がちらちらするんだけど
何が悪いのかな

argv.jsonの disable-hardware-accelarationはtrueにした
2022/07/27(水) 20:51:57.34ID:rf18Rv/q
2回書いたので失格
605デフォルトの名無しさん
垢版 |
2022/07/27(水) 21:08:44.11ID:8I1dQN/H
VSCodeでターミナルに文字が流れて行く時に画面がちらちらするんだけど
何が悪いのかな

argv.jsonの disable-hardware-accelarationはtrueにした
606デフォルトの名無しさん
垢版 |
2022/07/27(水) 21:09:20.89ID:8I1dQN/H
書き込めませんでしたというメッセージを出すmateが悪い
2022/07/27(水) 21:09:43.67ID:LZk+uw73
3回書いたので、敗者復活(ぴろぴらぴろ~ん
2022/07/27(水) 21:17:11.63ID:E+Dd+vMH
専ブラで書込失敗したら本当に失敗したか汎ブラで確認するだろ普通は
自分は悪くないとか言ってるとダメだよ
609デフォルトの名無しさん
垢版 |
2022/07/28(木) 02:37:06.41ID:RAA7k8hU
ポート番号7番でうけるエコーサーバーのソースコードを
調べたいのですが、githubのどこにあるのでしょうか?
bsd,linuxどちらでも構いません
回答よろしくおねがいします
2022/07/28(木) 08:36:13.31ID:ktot2FQ5
>>609
echoサービスってあったなあ。あれはinetd自体がやってたはず
なのでinetdもしくはxinetdのソースを探すべし
ソケットプログラミングとか知ってたらすんごい当たり前のことしかやってないと思うけど
2022/07/28(木) 09:49:49.09ID:m+r+vKYc
>>599
ありがとうございます、今回単体テスト&クラスのデザイン方針でモヤモヤしていた
ことを理解できました(と思います)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況