質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

396閲覧

「猫でもわかるC#プログラミング 第3版」の記述について

REIK727

総合スコア23

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2018/04/15 13:54

前提・実現したいこと

「猫でもわかるC#プログラミング 第3版」に書かれていることが間違っているのか、私が誤解しているだけなのか知りたい

発生している問題・エラーメッセージ

「猫でもわかるC#プログラミング 第3版」の139ページにこんな記述がありました。


次のような書き方もできます。

 int[,] myArray = new int[2,3] {{ 4, 5, 6 }, { 7, 8, 9 }};
int[,] myArray = new int[,] {{ 4, 5, 6}, { 7, 8, 9 }};
最初の書き方では要素数が指定されているので、全部の要素の初期値を描く必要はありません。初期値が指定されていない要素は0で初期化されます。2番目の書き方では、初期値の数だけの要素を持った配列となります。なお、要素数を一部だけ指定することはできません。

しかし、手持ちのVisual Studio 2017で以下のコードを入力したところコンパイルエラーになりました。

C#

1using System; 2 3class Program 4{ 5 public static void Main() 6 { 7 int[,] a = new int[2,3] { { 1, 2, 3 }, { 3, 3 } }; 8 } 9}

上記の記述からここでa[1,2]は0で初期化されると思ったのですが、実際にはされないようです。これは「猫でもわかるC#プログラミング 第三版」の方が間違っているのでしょうか?それとも私が文章の意味を読み違えているのでしょうか?あるいは「猫でもわかるC# 第三版」の出版後にC#の仕様が変わったのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

iwamoto_takaaki

2018/04/15 14:30

”次のような書き方も”の手前にはどのような書き方がしてありますか?”最初の書き方”がその点を指しているといることはありませんか?
REIK727

2018/04/15 14:44

引用文が書かれていたのは第6章2で、そこは2次元配列の宣言の仕方(データ型[,] 配列名;)、宣言と同時に要素の生成の仕方(データ型[,] 配列名 = new データ型[要素数1, 要素数2];)、宣言と同時に初期化の仕方(int[,] myArray = {{ [0, 0]の初期値...(以下略))、そして問題の記述、という流れでした。Zuishinさんのご回答とも考えあわせると、「最初の書き方」というのは「宣言の仕方」あるいは「宣言と同時に要素の生成の仕方」を指していたということですかね...
iwamoto_takaaki

2018/04/16 00:50

うーん、”全部の要素の初期値を描く必要はありません。”という記述があるならその通りに受け取ってよさそうな気がするのですが・・・
REIK727

2018/04/16 01:33 編集

やっぱりそういうことですかね… なんか納得いかないなあ… とにかくご協力ありがとうございました。
guest

回答2

0

Microsoftのプログラミングガイド等を漁ってみましたが
配列初期化式で初期値が不足した場合について言及はないですね

全部の要素を指定するか、指定しないか になると思います。

↓から問い合わせてみてもいいかと
http://www.sbcr.jp/products/4797385632.html

投稿2018/04/15 14:23

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

REIK727

2018/04/15 14:27

わざわざ調べていただきありがとうございます。やはり初期値はすべて指定するか、一つも指定しないかになるんですね。 ご回答ありがとうございました。
guest

0

ベストアンサー

C#

1int[2,3]

要素は 2 × 3 = 6 つ必要ですが 5 つしかありません。

投稿2018/04/15 14:03

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

REIK727

2018/04/15 14:12

おっしゃる通り要素はa[0,0]、a[0,1]、a[0,2]、a[1,0]、a[1,1]の5つしか初期化していません。しかし「猫でもわかるC#プログラミング 第三版」の記述の意図を私が誤解しているわけでなければ初期化をしていないa[1,2]には自動的に0があてはめられると思ったのですが...
Zuishin

2018/04/15 14:16

こちらではその本を持っていないので文脈がわかりませんが誤解しているのでしょう。 次のような書き方ならできます。 int[,] a = new int[2,3]; a[0, 1] = 1; Console.WriteLine(a[0, 1]); Console.WriteLine(a[0, 2]); a[0, 1] 以外は 0 で初期化されます。
REIK727

2018/04/15 14:25

うーん、そういう意図の記述だったんですかね... とりあえず納得しました、ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問