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

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

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

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

Q&A

解決済

2回答

6721閲覧

C# Listの要素同士の足し算について

Mt.Tachikawa

総合スコア20

C#

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

0グッド

0クリップ

投稿2020/04/29 14:05

C#のListについて質問させてください。

テトリスのようなものを自作しようとしていて、
二次元リスト(List<List<int>>)の中身同士を足し算させようとしているのですが、
「1+4」の結果が「5」ではなく「14」になってしまっています。
「足し算」というよりは「文字の結合」のような有様です。

問題の例(というか箇所)ですが…

// Debug.Log("GetBlockID()。mino2D[" + i + "]番の第" + j + "ブロックはX="+ mino2D[i][bX] + mino2D[i][2] +"("+ mino2D[i][bX] +" + "+ mino2D[i][2] + "), Y="+ mino2D[i][bY] + mino2D[i][3] +"("+ mino2D[i][bY] +" + "+ mino2D[i][3] + ")です。引数pX=" + pX + "引数pY=" + pY);

if (mino2D[i][bY] + mino2D[i][3] == pY) // 引数のYと、Listに格納されているYを確認します。
{
// コードはかなり長いので省略させていただいてます。(必要でしたらすぐに掲載いたします。)

// 「mino2D」は整数型List型List(List<List<int>>)で、
// 「bY」と「i」は数値型の変数です。(情報不足でしたらすぐに掲載いたします。)
}

…というif文の中で、「mino2D[i][bY] + mino2D[i][3]」という足し算を行なっているのですが、
私としては、「mino2Dの[i]の[bY]に格納されている数値と、mino2Dの[i]の[3]に格納されている数値を足し算している」つもりなのですが、
冒頭にご説明したとおりの「結合」のような結果になってしまっています。

足し算さえ行わなければ、単体の値としては、Debug.Log()やUnityエディターのインスペクターでは正常な値が表示されていることは確認しています。

(正解かどうかはわかりませんが、)私としては、「整数型List型のList」と「整数型のList」は違うものだからこういう現象が起こっているのでは…?
と感じています。

中身がListであるListを中身が数値であるListのように扱ったから、List型Listの中身はListであって数値ではない。
だから「0+5」の結果が「5」ではなく「05」とDebug.Log()で表示されてしまう。
そう考えるとこの現象は説明できるのですが、解決策が今の所わかりません。

そこでお伺いしたいのですが、こういうList<List<int>>の値同士を足し算する場合はどのような方法があるのでしょうか?
できるものならif()条件式の中に記述できる方法だとありがたいです。

自分で苦しんだ分しか成長しない世界だと思うし、安易に人様の時間を奪うのは好きではありませんが、もしご存知の方がいらっしゃればお教えいただけると助かります。

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

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

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

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

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

Zuishin

2020/04/29 14:07

どこのことかよくわかりませんが、文字列と結合している時点で文字列になっています。
Zuishin

2020/04/29 14:09

つまりこういうことです。 Debug.WriteLine(1 + 2 + 3); 6 Debug.WriteLine("1" + 2 + 3); 123
Mt.Tachikawa

2020/04/29 14:16

ご多用の中、アドバイスいただきありがとうございます。 質問が下手で申し訳ありません。 if()の条件式の中で「数値が格納されているListのList」同士を足し算してみたのですが、どうもうまくいかなくて困っているところです。 質問の文章をもっと練り直させていただきます。
Zuishin

2020/04/29 14:26

それよりも、回答者の手元で問題の再現する最小のコードを書いた方が伝わります。 今のままでは謎のメソッドが使われてたり大事なところが欠落していたりで何が問題なのかわかりません。
YAmaGNZ

2020/04/29 14:38

その「14」となっている確認をどう行っているのかだと思います。 Console.WriteLine("a + b = " + a + b); とかしていませんか? Listどうこうではなく、文字として連結される記述なのか数字として計算される記述なのか区別がついていないのが問題かと思います。
KoichiSugiyama

2020/04/29 16:00

>「0+5」の結果が「5」ではなく「05」とDebug.Log()で表示されてしまう。 とありますので、単にDebug.Log()で出力するときに文字列と数値を"+"で結合されているだけではないでしょうか?デバッガでif文近辺でブレークポイントを設定して値の推移を調べてみてはどうでしょうか。
Mt.Tachikawa

2020/04/29 23:31

おはようございます。 たくさんのご意見ありがとうございます。 「回答者の環境で再現できる最小のコード」…その通りだと感じました。 昨日、質問の文章を書きながら自分でも「こんな下手な質問の仕方では伝わらないはず…」って感じてましたが、どうすればいいかわかりませんでした。ご迷惑をおかけしました。 「文字として連結される記述なのか数値として計算される記述」「文字と数値を結合」…なるほど!! 私がそのListを「数値」だと思い込んでいるだけで、言語的には数値にはなっていない…たまらなく正解のような気がしています。 アドバイスに従い、まずはデバッガーで値の推移を調べさせていただきます。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2020/04/30 00:37 編集

> 「回答者の環境で再現できる最小のコード」…その通りだと感じました。 コードをアップする際は、そのコードを ``` と ``` で囲ってください。インデントされて見やすくなるので。インデントされてないコード(今の質問欄のようなコード)は質問者さん自身も読む気がしないのでは?
guest

回答2

0

mino2D[i][bY] + mino2D[i][3]の部分を括弧で括って優先順位を上げてみてはどうでしょうか

投稿2020/04/29 16:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Zuishin

2020/04/29 16:32 編集

それはこの質問の正しい解決法だと思いますが、追記・修正依頼欄で聞いたところ、質問と実際の問題が違うようです。実際には if の条件式の中で問題が発生しているとのことです。 もし + と == の優先順位のことでしたら、+ の方が優先順位は高いのでくくっても同じです。
退会済みユーザー

退会済みユーザー

2020/04/30 01:36

Debug.Logの部分が正しく動けば ifの条件式の問題も分かると思います
Zuishin

2020/04/30 01:37

いいえ、Debug.Log では他の文字列と連結しているので、条件が違います。
Zuishin

2020/04/30 02:04 編集

条件式の中では他の文字列がありません。したがって、この二つの変数のどちらかが文字列だという可能性が高いですが、その場合、優先順位の変更は無意味です。 また、「うまくいかない」とだけ書かれているので、Debug.Log の問題と条件式の問題は異なる問題の可能性もあります。つまり何らかの原因で条件式が意図通りに働かなかったので、原因を突き止めようと Debug.Log をとってみると、そこで更に新しいバグが入って文字列と数値が連結されてしまった、それを条件式の問題と同じものだと思い込んだ、という可能性があります。
退会済みユーザー

退会済みユーザー

2020/04/30 02:28

なので、括弧でくくることで"新しいバグが入って文字列と数値が連結されてしまった"の部分を解決できると思いました。
Zuishin

2020/04/30 02:30

質問文はその部分が問題のように書かれていますが、詳しく聞くと、その部分が問題なのではないようです。
退会済みユーザー

退会済みユーザー

2020/04/30 02:37

テトリスって意外と難しいですからね
退会済みユーザー

退会済みユーザー

2020/04/30 02:38

質問者さんがデバッグでもうまく行かないようならコードをさらに追記してほしいです。
Zuishin

2020/04/30 02:40

回答者の手元で問題の再現する最小限のコードを出すよう要請していますが、それを作っている途中で自己解決する可能性もありますね。それはそれで良いことだと思います。
退会済みユーザー

退会済みユーザー

2020/04/30 03:39

分かってくれたみたいで良かったです
Zuishin

2020/04/30 03:40

え? わかってないみたいです。
Zuishin

2020/04/30 03:42

話が食い違っているのは、追記・修正依頼欄を知らないということですか?
Zuishin

2020/04/30 03:50

> 質問が下手で申し訳ありません。 > if()の条件式の中で「数値が格納されているListのList」同士を足し算してみたのですが、どうもうまくいかなくて困っているところです。 > 質問の文章をもっと練り直させていただきます。 このように、質問文が実際の問題を表現できていないために誤解が生じているので書き直したいむねが書かれています。 これは私のコメントに対する返信で、そのコメントとは、「文字と数字を連結しているのではないか」という主旨のものでした。 これに対する「そういうことを聞いているんじゃない」という返信です。
退会済みユーザー

退会済みユーザー

2020/05/22 03:35

すみません、最初から私の間違いでした ムキになってしまっていました お手数煩わせて申し訳ありません
guest

0

自己解決

おはようございます。

書き込みがすごくされていて「悪いことをしたのでは…」とハラハラしています。

昨晩どうにか自己解決しました!!

mino2D[i][bY] + mino2D[i][3]の部分を括弧で括ってから、それを(int)を用いてキャストしたところ、希望通りに動作しました。

(int)(mino2D[i][bY] + mino2D[i][3])
⬆︎
こんな感じです。

「List<List<int>>型」のmino2Dを、「整数型」と勘違いしていた当方のミスです。

この度は、当方の下手な質問の仕方により、大変ご迷惑をおかけしました。
次回質問させていただくときは、必ず、回答者様側の環境で再現できる最小のコードを添付いたします。

失礼いたします。

投稿2020/05/01 00:14

Mt.Tachikawa

総合スコア20

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

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

Zuishin

2020/05/01 00:19

mino2D が本当に List<List<int>> なら、int にキャストする必要はありません。 その場合は ebiten さんの回答がベストアンサーになるはずです。
Zuishin

2020/05/01 00:21

そして、追記・修正依頼欄に書いたことは何だったのかということになります。条件式は無関係です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問