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

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

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

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

Android Studio

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

4042閲覧

加速度センサーのデータを配列へ 

pro

総合スコア28

Java

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

Android Studio

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/01/24 12:58

###前提・実現したいこと
スマホの加速度センサーの値を配列に入れる。

###発生している問題・エラーメッセージ
event.values[0]にするとエラーは発生しないが、配列に入らないという感じです。

エラーメッセージ
event.values[0][i]に赤い波線で

「Array type expected;found:'float'」

###該当のソースコード

float[][] accell = new float[3][3]; public void onSensorChanged(SensorEvent event) { for (int i = 0; i < 3; i++) { accell[0][i] = event.values[0][i]; accell[1][i] = event.values[1][i]; accell[2][i] = event.values[2][i]; }

###試したこと
3行3列の配列を宣言し、センサーの値が変わったら繰り返し文で配列に格納しようとしました。

###補足情報(言語/FW/ツール等のバージョンなど)
Androoidstudio

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

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

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

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

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

guest

回答3

0

ベストアンサー

valuesはその時刻でのセンサーの値です。

センサーの履歴を取りたければ、たとえば
accell を float[1000][3]
とでもして、
取得するたびに0..999に順番に入れていけばいいです。

が、これだと1000サンプルまでしか取れないので
こういうときは普通List使います。
ArrayList<float[]>

値が来る度に、リストの末尾にその時刻のセンサの値を突っ込めば履歴になりますね。

投稿2017/01/25 03:22

ozwk

総合スコア13528

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

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

pro

2017/01/25 09:20

ご回答ありがとうございます。以下のような感じでコードを考えましたがうまくいきません。どこが間違っているか教えていただけると幸いです。 ArrayList<Float> accell = new ArrayList <Float>(); public void onSensorChanged(SensorEvent event) { for (int i = 0; i < accell.size(); i++) { accell.add(event.values[1]); data=accell.get(i); }}
ozwk

2017/01/25 09:43

では、 そのfor文は何を意図して書いたのか説明してもらえますか?
pro

2017/01/25 10:10

検知したセンサーの値の数だけArrayListに入れて、それらのデータを取り出すことを目的としました。
ozwk

2017/01/25 10:40

取り出すのにfor文を使うのはわかりますが 値の追加もなぜfor文で?
pro

2017/01/25 11:28

値の追加は外に出し以下のようにしました。 accell.add(event.values[1]); for (int i = 0; i < accell.size(); i++) { accell.get(i); } その結果、テキストボックスに値を表示することができました。 しかしやりたいことは、取れた値を1つ取り出す(たとえば3つ目に取れた値)ことなのですが。。。
ozwk

2017/01/25 11:47

1つ取り出せばいいなら 加速度の履歴取る必要ないのでは?
pro

2017/01/25 12:03

最終的にやりたいことがあり、その前の段階として1つ取り出したいと思っています。 加速度のデータは履歴として配列に入れたいです。
guest

0

配列だとあふれてしまうので、多次元のArrayListが考えられますが
2次元のArrayListでは

ArrayList<ArrayList<型名>> list = new ArrayList<ArrayList <型名>>();

ただこれを増やしていくのは?です

x,y,z軸とtimestampとしてそのままArrayListに入れて
あとで4で割った余りを使って分けた方がいいように思います

また加速度センサーは端末のデバイスにもよりますが間隔はせいぜい20msec程度です

登録でsamplingPeriodUsという引数を設定できるのですが

registerListener (SensorEventListener listener, Sensor sensor, int samplingPeriodUs)

例えばNexus 5XのBosche BMI10の場合は
2.5ms, 5ms, 10ms, 20ms の値しか取れないようです

https://akira-watson.com/android/accelerometer.html

約20msecと想定して取り込んでも支障はないのでは
現実問題としてはそれ以外にフィルターをどう入れるかの方が重要だと思います
使用目的が分かりませんが

投稿2017/01/25 01:06

aja

総合スコア3733

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

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

pro

2017/01/25 09:21

ご回答ありがとうございます。以下のような感じでコードを考えましたがうまくいきません。どこが間違っているか教えていただけると幸いです。 ArrayList<Float> accell = new ArrayList <Float>(); public void onSensorChanged(SensorEvent event) { for (int i = 0; i < accell.size(); i++) { accell.add(event.values[1]); data=accell.get(i); }} とりあえず、y軸だけで考えてみました。
guest

0

valuesは1次元の配列なので、values[0][i]のように2次元配列のように扱えません。

投稿2017/01/24 13:02

swordone

総合スコア20651

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

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

pro

2017/01/24 13:16

回答ありがとうございます。 では加速度センサーのデータを2次元データ(軸方向と時間)で処理するのは不可能なのでしょうか?
swordone

2017/01/24 14:55

何をどうしたいのかいまひとつわからないのですが…
pro

2017/01/24 15:04

加速度センサーのデータを値を取得するともに配列に入れたいのですが、、、 たとえば、0.1秒のとき[0],0.2秒のとき[1],..,0.n 秒のとき[n-1]へというイメージです。
swordone

2017/01/24 15:06

そこまで細かく取得できるか自体怪しいのですが
pro

2017/01/24 15:14

実際はセンサーの値が変化したら取得できるので、等間隔ごとでは取れません。 あくまでイメージとして伝えたかったので。わかりにくくて申し訳ないです。 センサーの値が変わるごとに、新たな配列の箱に入れたいということです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問