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

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

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

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

5250閲覧

ArrayIndexOutOfBoundsException Processing Java

Tats.N

総合スコア62

Java

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2016/12/08 22:28

こんにちは。いつもありがとうございます。

Javaは全くの初心者でよくわからないのですが、下のコードのdraw関数内の
prevColor[i]で、ArrayIndexOutOfBoundsException: 76800というエラーが出ます。配列の長さ以上をループしようとしているのかと思いましたが、何かよくわからず。。。
分かる方おられましたらご教授ください。宜しくお願いします。

Java

1import org.openkinect.freenect.*; 2import org.openkinect.processing.*; 3 4// The kinect stuff is happening in another class 5//KinectTracker tracker; 6Kinect kinect; 7 8//ArrayList<ParticleSystem> particleArray; 9PVector previousMousePos; 10int frameRateSet = 60; 11//float[] colorChange = new float[2]; 12float[] counter = new float[2]; 13float[] colorMap = new float[2]; 14int step = 4; 15int[] depth; 16PImage depthImage; 17float kinectColorMap; 18float[] prevColor = new float[307200/step]; 19 20void setup(){ 21 size(640,480); 22 kinect = new Kinect(this); 23 kinect.initDepth(); 24 depthImage = kinect.getDepthImage(); 25} 26 27void draw(){ 28 29 depth = kinect.getRawDepth(); 30 //depthImage = kinect.getRawDepth(); 31 //image(depthImage,0,0); 32 33 fill(255); 34 for(int i = 0; i < depth.length; i+= step){ 35 //pushMatrix(); 36 boolean colorCheck = false; 37 noStroke(); 38 // kinect v1, the raw depth values range between 0 and 2048 39 kinectColorMap = map(depth[i],0,2048,0,255); 40 if(kinectColorMap < 100){ 41 colorCheck = true; 42 fill(0); 43 }else{ 44 fill(255); 45 colorCheck = false; 46 } 47 48 if(prevColor != null && prevColor[i] != kinectColorMap){ 49 ellipse((float)i%kinect.width, 50 (float)Math.floor(i/kinect.width), 51 10,10); 52 println("working"); 53 } 54 55 noStroke(); 56 rect( 57 (float)i%kinect.width, 58 (float)Math.floor(i/kinect.width), 59 (float)step, 60 (float)step 61 ); 62 println(prevColor[i],kinectColorMap); 63 64 65 66 //popMatrix(); 67 }//end loop 68 69} 70 71void mousePressed(){ 72}

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

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

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

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

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

guest

回答2

0

一つの入れ物が76800にみえるので添字は0から76799までですね。

よって76800は添字範囲外例外となります。

投稿2016/12/08 23:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

kinectを持たないのでコードだけで判断しています
その点は予めご了承ください

int step = 4;
float[] prevColor = new float[307200/step];
と初期化しているようですが

for文では
for(int i = 0; i < depth.length; i+= step){
としているため

depth.length <= 307200/step
つまりここでは
depth.length <= 76800
となるとエラーが発生します

prevColor[i]をprevColor[floor(i/step)]と変更し
if(i/step < 307200/step){}
というようなif文に入れて使用するか

あるいは
for(int i = 0; i < depth.length; i+= step){を
for(int i = 0; i < 307200/step; i++){と修正し
prevColor[i] 以外で使われている ii*step とする
などすれば回避できると思います

またfor文内に2箇所あるprintln()関数は
このまま実行すると
コンソールに不可がかかり処理落ちすると思われます
(1秒間に少なくとも230万行程出力する計算になります)

if(i%1000 == 0){}
というようなif文に入れて実行する事をおすすめします

投稿2016/12/09 02:58

e-cube

総合スコア284

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

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

Tats.N

2016/12/15 20:49

なるほど。。長さが違ったのは凡ミスでした。。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問