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

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

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

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

1459閲覧

Logの計算時に落ちてしまう

shinig001

総合スコア16

Java

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

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2016/10/13 12:46

以下のコードで実行するとx = 4のときsumLog[ x ] = の式のあとにアプリが終了してしまいます。
尚、sum[ x ]はどの場合も先ほどの式の時には4になっています。

AREA = 5,ALLNODES = 20

Java

1 int x = 0,y = 0; 2 int[] sum; 3 double sumLog[]; 4 5 sum = new int[AREA]; 6 sumLog = new double[AREA + 1]; 7 8 while ( x != AREA + 1)//x座標 9 { 10 while( y != AREA + 1)//y座標 11 { 12 sum[ x ] += array[ x ][ y ]; 13 y++; 14 } 15 16 if ( x > AREA ) 17 { 18 Toast ts = Toast.makeText(this,"確認",Toast.LENGTH_SHORT); 19 ts.show(); 20 } 21 sumLog[ x ] = Math.log10(sum[ x ]) / Math.log10(ALLNODES); 22 x++; 23 y = 0; 24 } 25

なぜ落ちてしまうのでしょうか、、、
どなたかご教授ください。

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

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

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

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

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

swordone

2016/10/13 12:58 編集

落ちたときのエラーログを載せて下さい。加えてarrayとはなんですか?
guest

回答3

0

配列sumの要素数はAREA(=5)であるので、使用できる添え字は0から4まで。
一方ループカウンタxは0から5(ループ終了条件がx != AREA + 1(= 6)であるため)の値をとりえる。

つまり配列sumの要素数を超えて使用してしまうことになります。

投稿2016/10/13 13:21

HogeAnimalLover

総合スコア4830

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

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

0

ベストアンサー

int sum[]はnew int[AREA]で初期化されているので要素は5です。
ところがif(x>AREA)で判定した後にsum[x]としていることから要素数を超えた領域にアクセスしているせいで落ちていると推測されます。

投稿2016/10/13 12:59

yona

総合スコア18155

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

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

shinig001

2016/10/14 11:00

まさしくその通りでした! 無事解決しました。 ありがとうございました。
guest

0

落ちている原因は他の方の回答のとおりだと思いますが、while文の書き方としてwhile ( x != AREA + 1)という書き方は危険です。xが(AREA+1)以外の時はwhileの条件が成立してしまうためです。
色々と処理を追加していく中で、ループの中でx += 2;とやってしまうとループを抜けられなくなる可能性があります。

java

1while(x < AREA+1)

と不等号を使ったほうが危険度は減ります。

投稿2016/10/14 08:18

PineMatsu

総合スコア3579

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

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

shinig001

2016/10/14 10:54

アドバイスありがとうございます 今後、失敗を減らすためにも参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問