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

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

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

Re[5]: 数値型の配列の要素に文字列を格納


(過去ログ 43 を表示中)

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

■22263 / inTopicNo.1)  数値型の配列の要素に文字列を格納
  
□投稿者/ やー (1回)-(2008/07/17(Thu) 17:04:12)

分類:[.NET 全般] 

数値型配列の要素に文字列を格納することについての質問です。


Dim X(3, 5) As Integer  '数値型の二次元配列を宣言します
X(0, 0) = "あ"      'この配列のX(0,0)に文字列「"あ"」を格納しようとします。

これをデバックすると「String "あ" から型 'Integer' への変換は無効です。」というエラーが出ます。
どうすれば、文字列を格納することができるのでしょうか。

※配列X(3, 5)を string型にせずに、数値型のままでお願いします。
引用返信 編集キー/
■22266 / inTopicNo.2)  Re[1]: 数値型の配列の要素に文字列を格納
□投稿者/ よねKEN (166回)-(2008/07/17(Thu) 17:09:38)
> これをデバックすると「String "あ" から型 'Integer' への変換は無効です。」というエラーが出ます。
> どうすれば、文字列を格納することができるのでしょうか。

数値型配列に対して文字列型をそのまま入れることはできません。
数値型だけを入れられる配列ですから。

> ※配列X(3, 5)を string型にせずに、数値型のままでお願いします。

どうして数値型のままにしたいのですか?何をしたいのでしょうか?
Object型の配列にしておけば、文字列も数値も入れられますが、
そうした場合、取り出して使うときに、それが文字列なのか数値なのかを意識する必要があるため、
普通はそういうことはしません。

何を実現したいのかがわかれば代替案はあるかもしれません。

引用返信 編集キー/
■22267 / inTopicNo.3)  Re[1]: 数値型の配列の要素に文字列を格納
□投稿者/ επιστημη (1170回)-(2008/07/17(Thu) 17:10:49)
επιστημη さんの Web サイト
> これをデバックすると「String "あ" から型 'Integer' への変換は無効です。」というエラーが出ます。
> どうすれば、文字列を格納することができるのでしょうか。
> ※配列X(3, 5)を string型にせずに、数値型のままでお願いします。

無理じゃないすか? 型が違うんだから。

X(3,5) = "勘弁してください";
Dim n As Interger
n = X(3,5);

さて、nには何て入ってんです?

引用返信 編集キー/
■22268 / inTopicNo.4)  Re[1]: 数値型の配列の要素に文字列を格納
□投稿者/ 魔界の仮面弁士 (787回)-(2008/07/17(Thu) 17:17:03)
No22263 (やー さん) に返信
> X(0, 0) = "あ"      'この配列のX(0,0)に文字列「"あ"」を格納しようとします。
> どうすれば、文字列を格納することができるのでしょうか。

X(0, 0) = Asc("あ")
引用返信 編集キー/
■22270 / inTopicNo.5)  Re[2]: 数値型の配列の要素に文字列を格納
□投稿者/ みきぬ (21回)-(2008/07/17(Thu) 17:30:23)
無粋なつっこみですが、

No22268 (魔界の仮面弁士 さん) に返信
> X(0, 0) = Asc("あ")

これだと文字列の最初の文字しか戻せないような。
引用返信 編集キー/
■22271 / inTopicNo.6)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ επιστημη (1171回)-(2008/07/17(Thu) 17:32:33)
επιστημη さんの Web サイト
ん? ひょっとして'文字'と'文字列'を混同してる?

引用返信 編集キー/
■22308 / inTopicNo.7)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ Jitta on the way (141回)-(2008/07/18(Fri) 07:05:16)
No22270 (みきぬ さん) に返信
> 無粋なつっこみですが、
>
> ■No22268 (魔界の仮面弁士 さん) に返信
>>X(0, 0) = Asc("あ")
>
> これだと文字列の最初の文字しか戻せないような。

文字の数だけ繰り返せば?



C で、char が文字でありながら数値も格納できる(文字コードが数値である、ということ)ことと、混同しているのでは?
引用返信 編集キー/
■22312 / inTopicNo.8)  Re[4]: 数値型の配列の要素に文字列を格納
□投稿者/ みきぬ (22回)-(2008/07/18(Fri) 09:50:07)
No22308 (Jitta on the way さん) に返信
> C で、char が文字でありながら数値も格納できる(文字コードが数値である、ということ)ことと、混同しているのでは?

C# だと、char と int の間は暗黙的に変換ができてしまいますが、
VB のように関数を通して変換するほうが、私としてはしっくりきますね。

…って脱線でした m(_ _)m
引用返信 編集キー/
■22313 / inTopicNo.9)  Re[1]: 数値型の配列の要素に文字列を格納
□投稿者/ シャノン (545回)-(2008/07/18(Fri) 09:53:07)
No22263 (やー さん) に返信
とりあえずスレ主を待とうよ。
引用返信 編集キー/
■22342 / inTopicNo.10)  Re[2]: 数値型の配列の要素に文字列を格納
□投稿者/ やー (2回)-(2008/07/18(Fri) 16:18:31)
みなさん返信ありがとうございます。

もっと詳しく記述するべきでした。申し訳ございません。

サッカーのリーグ戦のプログラムを作成しようとしています。

配列X[3,5]という配列を作り、
X[0,0]="日本"
X[1,0]="オマーン"
X[2,0]="バーレーン"
X[3,0]="タイ"
という文字列を格納したいのです。
それ以外の要素には、すべて「0」を格納します。

この後の処理に、それぞれのチームを対戦させます。
それぞれのチームに得点を入力し、比較します。
その結果で、勝ち点・得失点差・得点・失点を算出し格納します。さらにその結果、順位を格納します。

このようなプログラムを作成しようとしているのですが、配列Xで、上記のチーム名以外の要素は数値型にしたいのです。

分かりにくいかもしれませんが、アドバイス頂ければ幸いです。
よろしくお願い致します。



引用返信 編集キー/
■22344 / inTopicNo.11)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ みきぬ (26回)-(2008/07/18(Fri) 16:22:10)
配列じゃなくて、DataTable を使うと幸せになれるかも。

引用返信 編集キー/
■22345 / inTopicNo.12)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ シャノン (551回)-(2008/07/18(Fri) 16:23:37)
No22342 (やー さん) に返信
> 配列X[3,5]という配列を作り、
> X[0,0]="日本"
> X[1,0]="オマーン"
> X[2,0]="バーレーン"
> X[3,0]="タイ"
> という文字列を格納したいのです。
> それ以外の要素には、すべて「0」を格納します。

国名と点数は別の配列にすればよいのではないですか?
どうしても同一の変数に収まっている必要があるとは思えませんが。
その場合、string[4] と int[4,4] になると思います。
仮に同一の配列に収めても、[3,5] にはなりませんね。
引用返信 編集キー/
■22346 / inTopicNo.13)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ 鶏唐揚 (256回)-(2008/07/18(Fri) 16:25:26)
2008/07/18(Fri) 16:27:08 編集(投稿者)

1つの2次元配列にチーム名と各得点をまとめて保持しておきたい ってことですか。

それならば、2次元配列の型をIntegerではなくStringで宣言しておき、
得点は「数値」じゃなく「数字」として保持。
得点操作や表示する際にInteger.Parse等でキャストしてやればいいんじゃないかと。

#本来なら、チーム用・得点用を別々で持たせるべきだと思います。
 型変換不要ですし、今の方法だとチームと得点を紐付けるためのインデックス計算が必要ですが
 それぞれ別で持っていればひとつのインデックスで全部紐付けできますし。

引用返信 編集キー/
■22348 / inTopicNo.14)  Re[4]: 数値型の配列の要素に文字列を格納
□投稿者/ ネタ好き (576回)-(2008/07/18(Fri) 16:36:53)
Dictionary ジェネリック クラスを使えばいいと思います。
引用返信 編集キー/
■22349 / inTopicNo.15)  Re[4]: 数値型の配列の要素に文字列を格納
□投稿者/ みきぬ (27回)-(2008/07/18(Fri) 16:48:10)
2008/07/18(Fri) 16:49:27 編集(投稿者)

No22345 (シャノン さん) に返信
> その場合、string[4] と int[4,4] になると思います。
> 仮に同一の配列に収めても、[3,5] にはなりませんね。
VB.NET なら、[3,5] であっています。
指定しているのは要素数ではなくて、インデックスの上限なので。

…あれ、変だなと思ったら、いつの間にか X(3,5) から X[3,5] に変わっているorz
引用返信 編集キー/
■22351 / inTopicNo.16)  Re[3]: 数値型の配列の要素に文字列を格納
□投稿者/ bad14mg (19回)-(2008/07/18(Fri) 17:01:22)
No22342 (やー さん) に返信
> 配列X[3,5]という配列を作り、
> X[0,0]="日本"
> X[1,0]="オマーン"
> X[2,0]="バーレーン"
> X[3,0]="タイ"
> という文字列を格納したいのです。
> それ以外の要素には、すべて「0」を格納します。
>
> この後の処理に、それぞれのチームを対戦させます。
> それぞれのチームに得点を入力し、比較します。
> その結果で、勝ち点・得失点差・得点・失点を算出し格納します。さらにその結果、順位を格納します。

シャノンさんや鶏唐揚さんなどの手法で解決するのは思うのですが、
スレ主さんが何をしたいのかいまいち見えないので確認させて下さい。

X[n,0](n:0〜3)には、国名を格納したいということはわかるのですが、
X[n,m](m:1〜4)には何をセットしたいのでしょうか?

X[n,1] = 勝ち点(累積?)
X[n,2] = 得失点差(累積?)
X[n,3] = 得点(累積?)
X[n,4] = 失点(累積?)
ってこと?
引用返信 編集キー/
■22370 / inTopicNo.17)  Re[4]: 数値型の配列の要素に文字列を格納
□投稿者/ ま (82回)-(2008/07/19(Sat) 02:17:10)
・得点
・失点
・対戦チーム情報
 ・得点
 ・失点
 ・ホーム or アウェー

タイ/日本 がエントリーとして、ホームアンドアウェー1回戦、
というルールとして、アウェー得点2倍で失点差を計算
アウェー:タイが3対4で負け
ホーム:タイが0対3で負け

■ワールドカップ予選
 ●タイ
  ・得点=6
  ・失点=7
  ・対戦チーム情報
   ・国名=日本
   ・得点=3
   ・失点=4
   ・アウェー(タイがアウェー)
   ---
   ・国名=日本
   ・得点=0
   ・失点=3
   ・ホーム(タイがホーム)
 ●日本
  ・得点=10
  ・失点=3
  ・対戦チーム情報
   ・国名=タイ
   ・得点=4
   ・失点=3
   ・ホーム(日本がホーム)
   ---
   ・国名=タイ
   ・得点=3
   ・失点=0
   ・アウェー(日本がアウェー)

こんな感じのデータ構造になってればいいんじゃない?
勝ち点=3、引き分け=1、負け=−3

国名が文字列で、得点・失点が整数、ホームアンドアウェーが論理値
とかすると、いろんなデータ型をいっしょくたに出来る便利な器がVB
には用意されているからそれを覚えるといいかもね。
class っていうキーワードを使って箱を宣言すれば出来るよ。

例えば、
public class エントリーチーム
   public 国名 as string = "エントリーチーム"
   public 総得点 as integer = 0
   public 総失点 as integer = 0
   public 対戦チームリスト as new List(of 対戦チーム)
   public sub New(国名 as string)
      me.国名 = 国名
   end sub
end class

こうすればワールドカップ予選に出場するチームの器が簡単に出来ちゃう。
public class 対戦チーム
   public 国名 as string = "対戦チーム"
   public 得点 as integer = 0
   public 失点 as integer = 0
   public ホームアンドアウェー as boolean = false
end class

こーしておいてから、予選出場国を配列に登録するには、
dim ワールドカップ1次予選マップ as new Dictionary(of string, エントリーチーム)

ワールドカップ1次予選マップ.add("日本", new エントリーチーム("日本"))
ワールドカップ1次予選リスト.add("タイ", new エントリーチーム("タイ"))
ワールドカップ1次予選リスト.add("ビルマ", new エントリーチーム("ビルマ"))
ワールドカップ1次予選リスト.add("マレーシア", new エントリーチーム("マレーシア"))

とかやればいいんだ。簡単でしょ?

対戦チームの得失点の設定とか自国の総得失点の設定とか、得失点差やアウェー時には2倍で計算するとか
その他の必要なメソッドやロジックは適当に組み込んでやってみたらどーでしょう??



引用返信 編集キー/
■22592 / inTopicNo.18)  Re[5]: 数値型の配列の要素に文字列を格納
□投稿者/ やー (3回)-(2008/07/28(Mon) 10:54:35)
No22370 (ま さん) に返信
> ・得点
> ・失点
> ・対戦チーム情報
>  ・得点
>  ・失点
>  ・ホーム or アウェー
>
> タイ/日本 がエントリーとして、ホームアンドアウェー1回戦、
> というルールとして、アウェー得点2倍で失点差を計算
> アウェー:タイが3対4で負け
> ホーム:タイが0対3で負け
>
> ■ワールドカップ予選
>  ●タイ
>   ・得点=6
>   ・失点=7
>   ・対戦チーム情報
>    ・国名=日本
>    ・得点=3
>    ・失点=4
>    ・アウェー(タイがアウェー)
>    ---
>    ・国名=日本
>    ・得点=0
>    ・失点=3
>    ・ホーム(タイがホーム)
>  ●日本
>   ・得点=10
>   ・失点=3
>   ・対戦チーム情報
>    ・国名=タイ
>    ・得点=4
>    ・失点=3
>    ・ホーム(日本がホーム)
>    ---
>    ・国名=タイ
>    ・得点=3
>    ・失点=0
>    ・アウェー(日本がアウェー)
>
> こんな感じのデータ構造になってればいいんじゃない?
> 勝ち点=3、引き分け=1、負け=−3
>
> 国名が文字列で、得点・失点が整数、ホームアンドアウェーが論理値
> とかすると、いろんなデータ型をいっしょくたに出来る便利な器がVB
> には用意されているからそれを覚えるといいかもね。
> class っていうキーワードを使って箱を宣言すれば出来るよ。
>
> 例えば、
> public class エントリーチーム
> public 国名 as string = "エントリーチーム"
> public 総得点 as integer = 0
> public 総失点 as integer = 0
> public 対戦チームリスト as new List(of 対戦チーム)
> public sub New(国名 as string)
> me.国名 = 国名
> end sub
> end class
>
> こうすればワールドカップ予選に出場するチームの器が簡単に出来ちゃう。
> public class 対戦チーム
> public 国名 as string = "対戦チーム"
> public 得点 as integer = 0
> public 失点 as integer = 0
> public ホームアンドアウェー as boolean = false
> end class
>
> こーしておいてから、予選出場国を配列に登録するには、
> dim ワールドカップ1次予選マップ as new Dictionary(of string, エントリーチーム)
>
> ワールドカップ1次予選マップ.add("日本", new エントリーチーム("日本"))
> ワールドカップ1次予選リスト.add("タイ", new エントリーチーム("タイ"))
> ワールドカップ1次予選リスト.add("ビルマ", new エントリーチーム("ビルマ"))
> ワールドカップ1次予選リスト.add("マレーシア", new エントリーチーム("マレーシア"))
>
> とかやればいいんだ。簡単でしょ?
>
> 対戦チームの得失点の設定とか自国の総得失点の設定とか、得失点差やアウェー時には2倍で計算するとか
> その他の必要なメソッドやロジックは適当に組み込んでやってみたらどーでしょう??
>
>
>
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -