C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

vbのコンソールで「数a 数b」という入力の代入方法について

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■85942 / inTopicNo.1)  vbのコンソールで「数a 数b」という入力の代入方法について
  
□投稿者/ taka (1回)-(2017/12/04(Mon) 20:37:44)

分類:[VB.NET/VB2005 以降] 

windows7,microsoft visual basic2010です
コンソールアプリケーションで
7 5
など
数a 数bで与えられた数をa=数a,b=数bになるようにそれぞれ代入する方法はありますか?
今のところは
    Dim x As String
        Dim y() As String
        Dim a, b As Integer
        x = Console.ReadLine()
        y = (x.Split(" "))
        a = Integer.Parse(y(0))
        b = Integer.Parse(y(1))
のようにやっているのですが簡略化できる方法はないでしょうか
このままだと回りくどい気がします
ここを使うのは初めてなので不足している情報などがあったら教えてください

引用返信 編集キー/
■85943 / inTopicNo.2)  Re[1]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ WebSurfer (1393回)-(2017/12/04(Mon) 22:33:59)
No85942 (taka さん) に返信

> 数a 数bで与えられた数をa=数a,b=数bになるようにそれぞれ代入する方法はありますか?
> 今のところは
>    Dim x As String
> Dim y() As String
> Dim a, b As Integer
> x = Console.ReadLine()
> y = (x.Split(" "))
> a = Integer.Parse(y(0))
> b = Integer.Parse(y(1))
> のようにやっているのですが簡略化できる方法はないでしょうか

それのどこをどのように簡略化したいのか具体的に書いていただけませんか?

「数a 数b」とは何を言っているのですか?
引用返信 編集キー/
■85944 / inTopicNo.3)  Re[2]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ taka (2回)-(2017/12/04(Mon) 23:17:34)
2017/12/04(Mon) 23:26:05 編集(投稿者)
2017/12/04(Mon) 23:25:54 編集(投稿者)

No85943 (WebSurfer さん) に返信


> それのどこをどのように簡略化したいのか具体的に書いていただけませんか?

いまはstring型であるx,yを経由して代入しているのでinteger型であるa、bに直接数を代入できるようにしたいです
それが無理でも、経由する変数を減らしたいと思っています

> 「数a 数b」とは何を言っているのですか?

たとえば
7 5

2 10
などと入力が与えられた場合の左側の数7,2が数a、右側の数5,10が数bに当たります。
この説明で十分でしょうか…
引用返信 編集キー/
■85945 / inTopicNo.4)  Re[1]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ 魔界の仮面弁士 (1492回)-(2017/12/04(Mon) 23:50:53)
No85942 (taka さん) に返信
> 簡略化できる方法はないでしょうか

変数 1 つにまとめたいなら、
 Dim ab() As Integer = Strings.Split(Console.ReadLine(), " ").Select(Function(s) CInt(s)).ToArray()

 MsgBox(ab(0))
 MsgBox(ab(1))
などと書くことはできます。


ですがこの場合、入力検査がまったく含まれていませんから、
x y
とか
7 5 3
とか
100
のように、想定外の文字列が入力された場合にはエラーになってしまいます。


もしも不正な入力を判定するためのロジックを入れた上で、
ReadLine の処理結果を一つの変数で受け取りたいのであれば、

 Sub Main()
  Dim data = Sample.FromLine(Console.ReadLine())
  If data.Valid Then
   MsgBox(data.a)
   MsgBox(data.b)
  Else
   MsgBox("不正な入力")
  End If
 End Sub

のような書き方をすれば、呼び出し側は 1 個の構造体変数だけですみます。
その分、構造体側に追加のコードが必要になりますが。

 Public Structure Sample
  Public Property Valid As Boolean
  Public a, b As Integer
  Public Shared Function FromLine(raw As String) As Sample
   Dim cols() As String = Strings.Split(raw, " ")
   Dim result As New Sample() With {.Valid = cols.Length = 2}
   If result.Valid Then
    result.Valid = Integer.TryParse(cols(0), result.a)
   End If
   If result.Valid Then
    result.Valid = Integer.TryParse(cols(1), result.b)
   End If
   Return result
  End Function
 End Structure
引用返信 編集キー/
■85946 / inTopicNo.5)  Re[3]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ WebSurfer (1394回)-(2017/12/05(Tue) 00:03:01)
No85944 (taka さん) に返信

> それが無理でも、経由する変数を減らしたいと思っています

VB.NET の自動的な型変換に頼ってもダメなんですよね。だったら無理です。質問者さんがやったように
パースする他ないです。

C# を使うとか、VB.NET でも Option Srtict On にするとかして型を強く意識すればそういう発想は出
てこないはず。

> などと入力が与えられた場合の左側の数7,2が数a、右側の数5,10が数bに当たります。
> この説明で十分でしょうか…

今説明してもらって初めてわかりました。そんなことは、あなたが説明するまで誰も知らないというこ
とは分かりませんか?

掲示板でのやり取りでは掲示板に書いてあること以外は第三者は知り得ません。
引用返信 編集キー/
■85949 / inTopicNo.6)  Re[4]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ ベルパン (1回)-(2017/12/05(Tue) 09:18:39)
>>などと入力が与えられた場合の左側の数7,2が数a、右側の数5,10が数bに当たります。
>>この説明で十分でしょうか…
>
> 今説明してもらって初めてわかりました。そんなことは、あなたが説明するまで誰も知らないというこ
> とは分かりませんか?

今更?理解するのが遅くね?
今までの他の質問に対する書き込みからも分かるように、
ちゃんと相手の質問を理解しようと努力している?
「回答者はそんなにヒマじゃない」というのであれば、
このレベルの回答は控えるべきだ。
引用返信 編集キー/
■85950 / inTopicNo.7)  Re[2]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ 名無し (1回)-(2017/12/05(Tue) 12:37:36)
最初の質問見れば普通わかるよね
引用返信 編集キー/
■85951 / inTopicNo.8)  Re[3]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ 名無し (2回)-(2017/12/05(Tue) 13:03:33)
WebSurferはわからなかったのは仕方ないとしても偉そうな態度とるのやめたがいいと思う
回答者の俺様がわからなかったから質問者が悪いみたいな、そういう態度取ってるよ
いやいやおめーの読解力が不足してるだけだからと突っ込みたくもなるよ

引用返信 編集キー/
■85961 / inTopicNo.9)  Re[2]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ taka (3回)-(2017/12/05(Tue) 16:32:33)
No85945 (魔界の仮面弁士 さん) に返信

>  Dim ab() As Integer = Strings.Split(Console.ReadLine(), " ").Select(Function(s) CInt(s)).ToArray()
>
>  MsgBox(ab(0))
>  MsgBox(ab(1))

このコードで成功しました。ありがとうございます。
不正な入力の場合の対応まで教えていただきありがとうございました。
解決済み
引用返信 編集キー/
■85962 / inTopicNo.10)  Re[4]: vbのコンソールで「数a 数b」という入力の代入方法について
□投稿者/ taka (4回)-(2017/12/05(Tue) 16:36:44)
魔界の仮面弁士さまのご回答で解決いたしました。ご協力ありがとうございます。

> 掲示板でのやり取りでは掲示板に書いてあること以外は第三者は知り得ません。

このような場を使うのは初めてだったため最初の内容で十分伝わると勝手に思ってしまいました。ご教授ありがとうございます。以後気をつけます。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ