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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

2986閲覧

2Dの物理演算ライブラリ(box2d android環境 java) でのエラー  [ArrayIndexOutOfBoundsException]

kt.tk.co

総合スコア27

Box2D

Box2Dは、C++で記述された2D物理演算エンジン。C++以外にも多くの言語に移植されています。円形・多角形の物体の運動をシミュレーションすることが可能で、GUIで動作を確認できるテストベッドが付属されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/09/28 18:39

編集2016/09/30 15:07

2Dの物理演算ライブラリの「box2d」をandroid端末で動かしております。
言語はjavaです。

複数の物理オブジェクト(body)を生成しています。
また、body同士を結びつけるためにヒモやバネのようなオブジェクト(joint)を生成しています。

「Testing Box2D」のサンプルプログラムにコードを書き足して使用しております。
googleのplayストアはこちら
https://play.google.com/store/apps/details?id=pl.mg6.testing.box2d&hl=ja
サンプルコードはこちら
https://code.google.com/p/testing-box2d/

はじめに、物理演算BOX2Dで行いたい事は、観覧車のように中心を軸として回転する動作をさせるためです。
そのため、生成したBodyは観覧車のゴンドラのように、画面の中心を軸として回転します。
観覧車

複数のbody同士では当たり判定がないように設定してあり、実際には重なり合うような状態にしてあります。
この複数のbodyの表示を、画面下にあるものほど最前面に表示させる処理を行いたいです。

やりたいこと

簡単に処理ができればよかったのですが、そのような設定は見つかりませんでした。
そのため、「表示順を変更する処理」を実行させたいです。 (★下記にコード貼り付け★)
「表示順を変更する処理」では、
①すべてのbodyの座標を読み取る
②y軸の座標が小さい順に並び替え
③表示順を並び替えるため、「bodyとjointを再度生成する」
ことで実行させることにしました。

「bodyとjointを再度生成する」の処理は (★下記にコード貼り付け★)
すでに生成されているbodyを削除し、画面下のものから一つずつ再度生成していくものです。(早く生成されたbodyほど画面前面に表示されているため)
この処理自体はうまくできているのですが、この処理を入れた状態でbodyのjointを行うとエラーでアプリケーションが停止してしまいます。

何日も同じエラーで悩んでおります。
お力添え頂けますと幸いです。

エラーメッセージです。

09-29 02:57:05.778: E/AndroidRuntime(6811): FATAL EXCEPTION: main 09-29 02:57:05.778: E/AndroidRuntime(6811): java.lang.ArrayIndexOutOfBoundsException: index=13 length=13 09-29 02:57:05.778: E/AndroidRuntime(6811): at org.jbox2d.dynamics.Island.add(Island.java:423) 09-29 02:57:05.778: E/AndroidRuntime(6811): at org.jbox2d.dynamics.World.solve(World.java:976) 09-29 02:57:05.778: E/AndroidRuntime(6811): at org.jbox2d.dynamics.World.step(World.java:560) 09-29 02:57:05.778: E/AndroidRuntime(6811): at mori.ken.tab.breath001.box2d.PhysicsWorld.update(PhysicsWorld.java:1926) 09-29 02:57:05.778: E/AndroidRuntime(6811): at mori.ken.tab.breath001.box2d.Box2dActivity$3.run(Box2dActivity.java:461) 09-29 02:57:05.778: E/AndroidRuntime(6811): at android.os.Handler.handleCallback(Handler.java:587) 09-29 02:57:05.778: E/AndroidRuntime(6811): at android.os.Handler.dispatchMessage(Handler.java:92) 09-29 02:57:05.778: E/AndroidRuntime(6811): at android.os.Looper.loop(Looper.java:132) 09-29 02:57:05.778: E/AndroidRuntime(6811): at android.app.ActivityThread.main(ActivityThread.java:4123) 09-29 02:57:05.778: E/AndroidRuntime(6811): at java.lang.reflect.Method.invokeNative(Native Method) 09-29 02:57:05.778: E/AndroidRuntime(6811): at java.lang.reflect.Method.invoke(Method.java:491) 09-29 02:57:05.778: E/AndroidRuntime(6811): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 09-29 02:57:05.778: E/AndroidRuntime(6811): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 09-29 02:57:05.778: E/AndroidRuntime(6811): at dalvik.system.NativeStart.main(Native Method)

の部分より、該当箇所を抜粋します。

java.lang.ArrayIndexOutOfBoundsException: index=13 length=13`

m_jointCapacity=13
なのに対して、
m_jointCount=14
となっております。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

スクリーンショット

■バグの推測
デバッグを行うことで、エラー場所は特定できました。
しかし、原因や解決策はまったくわかりません。

動的に変更されるjointの個数がずれてしまい、joint配列の範囲外のものを指定しているようです。

本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが、なぜか今回の処理を行うとエラーが発生してしまいます。
(bodyやjointを削除・生成を繰り返す過程が問題?)

以下、コードとなります。
※ここに記載してあるコードは、すべてPhysicsWorld.javaの変数・関数です。

Java

1 ///////////////////////////// 2 //「表示順を変更する処理」 3 ///////////////////////////// 4 5 //重なりを調節するために再生成する関数 6 public void ShowItem2Forward( ) { 7 8 //現在のbody(剛体・物体)のリストを取得 9 Body bodies = getWorld().getBodyList(); 10 11 //bodyが空でなければ 12 if (bodies != null) { 13 14 //bodyごとに設定したbodyId(整数)を、並び替えた取得し配列へ代入 15 int[] SortBodyList = GetSortedBodyList(); 16 17 //並び順が前回と同じか否かを取得する。(同じならTrue、異なるならFalse) 18 boolean ArraySameFlag = ArraySameCheck(SortBodyList,SortBodyListPrevious); 19 20 //もし、前回と同じなら 21 if (ArraySameFlag){ 22 //なにもしない 23 }else{ //前回と中身が異なるなら 24 //bodyの数だけ、一つずつ再生成する。 25 for (int iiiaa = 0 ; iiiaa < ItemNum ; iiiaa++){ 26 //順番通り再度生成する。bodyIdの順番を引き渡す 27 Body2Backward( SortBodyList[iiiaa] ); 28 } 29 30 //SortBodyListPrevious(一つ前のBodyList)に、いまのSortBodyListを代入 31 SortBodyListPrevious = SortBodyList; 32 33 } 34 35 } 36 37 }

Body2Backward( SortBodyList[iiiaa] );
の部分でエラーが起きるため、さらに詳しく掲載します。
(一部省略しております。)

Java

1 ///////////////////////////// 2 //「bodyとjointを再度生成する」 3 ///////////////////////////// 4 5 //アイテム順番号が引数として得られる(bodyの個数は6つなので、itemOrderにはItemの番号である0~5が入る。) 6 public void Body2Backward(int itemOrder) { 7 8 int NumNum = itemOrder; 9 10 ////////////////////// 11 //アイテムを削除する処理 12 ////////////////////// 13 14 //Jointを消す 15 world.destroyJoint( JointOfItem2Center[NumNum] ); //body番号(NumNum)ごとにJointを生成してあるため、そのJointを削除する。JointOfItem2Center[body番号]にはjointの情報が入っている。 16 JointOfItem2Center[NumNum] = null; 17 18 19 //Jointを消す 20 //同様の処理なので省略 21 // 22 23 24 //bodyを削除するまえに行う処理 25 //座標を取得する。(再度アイテムを生成するために、同じ座標を記録しておく) 26 Vec2 position = body[NumNum].getWorldCenter(); 27 //速度を取得する。 28 Vec2 velocity = body[NumNum].getLinearVelocity(); 29 30 31 32 //Bodyを消す 33 if (body[NumNum].m_userData != null) { 34 world.destroyBody( body[NumNum] ); 35 body[NumNum].m_userData = null; 36 body[NumNum] = null; 37 } 38 39 40 ////////////////////// 41 //全く同じアイテムを生成する処理 42 ////////////////////// 43 44 body[NumNum] = MakeBody( ItemName[NumNum] , (float) (position.x) , (float)(position.y),1,0,0); 45 46 //速度を割り当てる 47 body[NumNum].setLinearVelocity(velocity); 48 49 50 //生成したアイテムをjoinする (ここでエラーが起きる!!!) 51 JointOfItem2Center[NumNum] = JointBody(CenterPoint1,body[NumNum],"distance"); //CenterPoint1は、画面の中央に生成したbodyです。再度生成したbodyを画面の中央に紐付ける必要があるのですが、この処理を実行するとエラーがおきます。 52 53 54 //生成したアイテムをjoinする 55 //省略 56 // 57 58 59 60 61 62 }

■Bodyの生成やJointの生成を行うために関数を作ってあります。

●Bodyの生成処理

Java

1MakeBody (String ItemWhich,float x,float y ,int MoveAble ,int RotationAble ,int CollisionAble) { 2//String ItemWhich : どのアイテムを生成するか。(if文で判定して、画像や半径などを振り分けます。) 3//float x : 生成するx座標 4//float y : 生成するy座標 5//int MoveAble : 移動できるかのFlag 6//int RotationAble : Bodyを回転させるかのFlag 7//int CollisionAble : 衝突できるかのFlag 8~省略~ 9MakedBody.createFixture(fixtureDef); //この処理で実際に生成する 10return MakedBody; 11}

●Jointの生成処理

Java

1Joint JointBody(Body body1, Body body2 , String JointType ) { 2//Body body1 3//Body body2 4//String JointType 5~省略~ 6MyJoint = world.createJoint(Joint情報); //この処理で実際に生成する 7return MyJoint; 8}

■ご回答頂いた内容についての補足
JointOfItem2Centerという配列について、以下に詳細を記載致します。
PhysicsWorld.javaで使えるグローバル変数として定義しております。

現段階でのBodyの個数は6個です。(int ItemNum = 6; としました。)
Jointを削除する操作をしたいので、Joint型の配列に保存しました。

Java

1//グローバル変数として定義 2 3//アイテムの数だけ、Bodyを生成する。(識別して処理ができる) 4Body body[] = new Body[ItemNum]; 5 6//アイテムの数だけ、Jointを生成する。(識別して処理ができる) 7Joint JointOfItem2Center[] = new Joint[ItemNum]; //→Body(ゴンドラ)ごとに、画面の中心とのJoint情報を保存するため。(常にItemNum個で問題ないはずです。) 8 9Joint JointOfItem2Item[] = new Joint[ItemNum]; //→Body(ゴンドラ)ごとに、隣りのBodyとJointした情報を保存するため。(常にItemNum個で問題ないはずです。)

観覧車_補足

■現在
生成済みのBodyやJointを入れる配列が問題かと考えてテスト中です。

■おわりに
上手く変数の引き渡しなどができないため、グローバル変数を多用してしまっている節があります。
また、メモリの管理などの理解が足りないため、そのようなご指摘など頂けますと幸いです。
何卒よろしくお願いいたします。

■Island.classについて
Island.classの中身を記載いたします。
ライブラリに入っていた(?)ものだと思います。
.classの拡張子のファイルを扱うのは初めてで、内容を変更できないことなどに戸惑っています。
また、デバッグで呼び出されていることはわかったのですが、どこに保存されているのか、どこから呼び出されているのか がわかっておりません。

public void init(int bodyCapacity, int contactCapacity, int jointCapacity, ContactListener listener) {}
が呼び出された際に、「jointCapacity」などが引数として得られているようです。
ただ、どこで「jointCapacity」を決めてinit()が実行されているのでしょうか?

Island.class
一部抜粋

Java

1 2/* */ public class Island { 3/* */ public ContactListener m_listener; 4/* */ public Body[] m_bodies; 5/* */ public Contact[] m_contacts; 6/* */ public Joint[] m_joints; 7/* */ public Position[] m_positions; 8/* */ public Velocity[] m_velocities; 9/* */ public int m_bodyCount; 10/* */ public int m_jointCount; 11/* */ public int m_contactCount; 12/* */ public int m_bodyCapacity; 13//~~省略~~ 14 15/* */ public void init(int bodyCapacity, int contactCapacity, int jointCapacity, ContactListener listener) { 16/* 189 */ this.m_bodyCapacity = bodyCapacity; 17/* 190 */ this.m_contactCapacity = contactCapacity; 18/* 191 */ this.m_jointCapacity = jointCapacity; 19/* 192 */ this.m_bodyCount = 0; 20/* 193 */ this.m_contactCount = 0; 21/* 194 */ this.m_jointCount = 0; 22 23//~~省略~~ 24 25/* */ } 26/* */ } 27

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

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

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

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

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

guest

回答2

0

JointOfItem2Centerと言う配列が他所数13(length=13)で定義されている。つまり、有効なインデックスは0~12の13種類。
それなのに、index=13でアクセスしたから、java.lang.ArrayIndexOutOfBoundsExceptionが発生したという事かと思います。

コードを拝見しましたが、JointOfItem2Centerという配列を拡張する(配列の要素全てを使い切ったら、メモリ上に新たな領域を確保して、そこに要素数を増やした配列を作り、元の配列からデータを移して、それ以降は新たに作った配列のほうを使う)というような部分は見当たりませんでした。

「本来であれば動的にjointの個数に合わせてm_jointCapacityの数が変更されていたのですが」と書かれていますが、m_jointCapacityの値を変更すると共に、それに合わせて配列を拡張していかなければindex ouf of boundの例外を避ける事ができません。

投稿2016/09/29 01:34

coco_bauer

総合スコア6915

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

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

KSwordOfHaste

2016/09/29 11:19

JointOfItem2Centerが遠因になっているかどうかはわかりませんが、直接の原因は違うと思います。質問者さんが張り付けておられるEclipseの例外のスタックトレースを見るとbox2dの提供クラスであるIsland#add内で例外が発生してます。なおbox2dの実装はJavaのArrayListのような柔軟なものを用いるという思想ではなく、必要サイズをあらかじめライブラリーユーザーに指定させ、配列の拡張は行わない前提で使うようになっているように見えます。JointOfItem2Centerは質問者さんの実装なのでこれをArrayListにした方がよいといったcoco_bauerさんのご指摘は一般論としてうなずけますが本件の直接的な原因かどうかはっきり分かりませんでした。
kt.tk.co

2016/09/30 15:16

coco_bauer様 、 KSwordOfHaste様 ご回答いただきありがとうございます。 私自身、直接な原因が「有効なインデックスの範囲外」だと考えておりました。 メモリの管理について理解が足らない部分があります。 JointOfItem2Centerについての詳細を、質問内容に記載いたしました。 勘違いさせてしまったようで大変申し訳ありませんが、JointOfItem2Centerは6個で増減しないJointを保存する配列です。 配列の中身を上書きするだけでは、前回のBodyやJointの情報がメモリに残ったままということはないでしょうか? m_jointCapacityの値がどこで決められて、どこから引数としてinit()に受け継がれているかがわかりません。 m_jointCapacityの値を無理やり上げてしまうことも考えていたのですが、それも難しいようでした。 m_jointはm_jointCapacityの個数だけ変数を持てるArrayListだと思います。 今回の処理をしない状態では、BodyやJointを生成するごとに自動で配列数を増やしてくれていました。(デバッグより確認) ただし、その"自動で"という部分の内容がわからず理解できていないため、エラーの解決策を発見できていない状態です。 いまは1つだけ持ち玉(最小構成から組み直す方法)が試せるため、もうすこし時間をかけてその方法を試してみようと思います。 (もし上手く行けば今回の原因はわからないままですが、動かせることを優先したいと思います。) 質問欄を更新しましたので、ご覧いただけますと幸いです。 引き続きよろしくお願いいたします。
guest

0

ベストアンサー

box2d知らないのでヒントになるかどうかわからないですが・・・

worldからJointやBodyを消す際に順番に気を付けるべし(Jointを先に消してからBodyを消さないとcrashする)というようなことを下のページで見かけました。(C++のページですが質問者さんのデバッグ画面上に見えている実装をみると雰囲気が似ているのでJavaでも内部は同じ論理で動いてるのかなと想像して話してます)

Box2D C++ tutorials

質問者さんが提示されているコードは一部省略されており、Body, Joint, Islandの削除や再初期化をどの順番で行っているのかが閲覧者に正確にわかりません。しかしIslandの指定容量を超えてJointが登録されようとしていることから、Body/Joinの削除順序もしくはIsland#clearを呼び忘れているといったあたりが疑わしく感じました。

投稿2016/09/28 20:42

KSwordOfHaste

総合スコア18392

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

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

kt.tk.co

2016/09/30 13:59

ご回答いただきありがとうございます。 すぐに回答を読ませて頂きましたが、ご返信が遅くなり大変失礼いたしました。 「Jointを先に消してからBodyを消す」ということに留意して実行しましたが、質問で記載したエラーについては解決しませんでした。 Body, Joint については、私の認識している範囲ではJoint→Bodyの順番で削除しております。 ただし、「Islandの初期化」や「Islandの指定容量」について認知しておりませんでした。 ご回答いただけてから、「Island#clear」について調べてみましたが、使い方やその効果などがよくわかりませんでした。 これは、どのような時に、どのような方法で、明示的に実行する必要があるのでしょうか。 よろしくお願い致します。 Island.classより抜粋 /* */ public void clear() { /* 228 */ this.m_bodyCount = 0; /* 229 */ this.m_contactCount = 0; /* 230 */ this.m_jointCount = 0; /* 231 */ } 現在、Body・Jointの変数名を変更して、最小構成で目的である「表示順を変更する処理」の実行をテストしております。 少々ご返信が遅くなるかもしれませんが、必ずご回答を拝見させていただきます。 よろしくお願い致します。 他の回答者様にご返信いただいた項目に対しても再度質問させていただきたく存じます。 今しばらくお待ちいただけますと幸いです。
KSwordOfHaste

2016/09/30 14:43

頑張ってくださいね!ライブラリーのソースを詳しく見てないのではっきりとわかりませんが直感的にはIsland#clearのこの実装は単純に全部のBody,Jointを無条件になにも接続されてない状態にし、そしてそのまま使いまわすというように思えます。なんだかアバウトな実装に見えるのでIslandって一度BodyとJointを構築したら破棄するという前提がないように見えるんです。 例えば自分なら「全Jointを最初にすべて破棄、全Bodyの座標をすべて記録、Bodyを(中央にあるものも含めて)全部破棄、IsLand#clear、そして全部作り直す」といったことを試すかもしれません。
kt.tk.co

2016/09/30 15:22

KSwordOfHaste様 引き続きありがとうございます! Body一つずつではない方法ですね! 「全Jointを最初にすべて破棄、全Bodyの座標をすべて記録、Bodyを(中央にあるものも含めて)全部破棄、そして全部作り直す」 の順番で試してみましたが、同様のエラーが表示されてしまいました。 「IsLand#clear」は実行していないので、「IsLand#clear」についてもう少し調べてみることに致します。 まずは現在行っている方法で一度ためして、こちらへ報告致します。 まだまだ時間がかかりそうなので、お時間のある時に再度ご覧頂けますと幸いです。 それではまたお力添え頂けますと幸いです。 一度失礼致します。
KSwordOfHaste

2016/10/01 09:26

Islandのソースはjarから逆コンパイルされたものなので変更はできませんが、メソッド内部へstep inすると一応デバッグは可能です。それはさておき、Islandはユーザーが直接使うものじゃないみたいですね自分でclearなどを呼ぶのは多分NGと思います。ごめんなさい。ところで、stack overflowを覗いたら「World#stepの中ではBodyを破棄するのはNGというトピックを見かけました」問題の原因はこれでは?
kt.tk.co

2016/10/02 13:12

Islandは逆コンパイルされたものだったのですね! 編集できないことに納得です! 逆コンパイルした内容まで見れて、デバッグまで行えていたことに驚きです。 clearの呼び出し方などがよくわからなかったのですが、ユーザが呼び出せないものでしたのね! お教えいただきありがとうございます。 色々と試してみた結果、エラーを発生させず目的の動作をさせることができました。 解決策と言うよりは、「応急処置」ではありますが今のところエラーでアプリが落ちてはおりません。 行った方法は、目的である「複数のbodyとJoint」以外にも「目的のために”使用しない”BodyとJoint」を生成するというものです。 初め(エラーがでる状況で)は7つ(中心点1,ゴンドラ6)のBodyと12個のJointで観覧車を組み立てておりました。 色々と試していると、その観覧車のセットをもう一組生成すると、問題なく「表示順を変更する処理」が実行されていることに気づきました。(2つのうち1つの観覧車セットにしかその処理は反映されていませんでしたが) そこで、使用しないBody6つを生成し、そのBody同士を6つのJointで繋げたセットを観覧車セットと同時に生成しました。 そうしたところ、質問で記載したエラーは起きることがなくなりました。 質問時(エラーが置きていた状態)では、「観覧車セットを生成した瞬間」または、「観覧車セットの生成までは問題なくできても、指でBodyをタップした瞬間」にエラーで落ちました。 指でタップしてエラーにつながることからも、Jointの配列の範囲外が問題なのかと考えておりました。 根本的な解決ができず不甲斐ないのですが、質問に答えていただき励みになりました。 KSwordOfHaste様には何度もお答え頂いただけでなく、私の知らない観点から色々と調べ頂きとても心強く感じておりました。 お力添えいただきありがとうございました。 >>「World#stepの中ではBodyを破棄するのはNGというトピックを見かけました」 と教えて頂いた内容についても調べてみました。 その場合、”box2dのloopで毎回行われる処理で破棄ができない”という認識で誤りはないでしょうか。 (World#step という項目がどの部分で何を示しているかを理解できなかったので) 質問時から「表示順を変更する処理」はPhysicsWorld.javaに関数を書いてはありましたが、実行もとはスレッドで0.3秒ごとに呼び出しておりました。 「World#step」が理解できていない状態で判断はできませんが、「World#stepの中ではBodyを破棄する」という行為は運良く避けられていたのですかね? 根本的な解決でなく原因もわからないままで、お答えいただいたKSwordOfHaste様のためにお返しできるものがなく申し訳ありません。 原因が特定できてれば、今後にも役立てられる成果をお返しできるかと思いましたがそこまでに至りませんでした。 現状では動作を最優先していたためステータスを”解決”として、ベストアンサーとさせていただきます。 またの機会がございましたら、何卒よろしくお願いいたします。 それでは失礼致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問