java索引越界异常_陷入while循环/索引越界异常

我想弄清楚步骤何时发生。所以我编写了一个名为countSteps的方法来执行此操作。它的问题是我陷入其中,因为使用while循环我不断获得新数据,我不认为它会返回onSensor。我还得到一个名为indexoutofboundsexception的错误:索引2无效,大小为2。

所以我的第一个问题是有没有其他方法来实现我没有while循环的方法?其次是我如何修复indexoutofboundsexception。

公共类MainActivity extends Activity实现SensorEventListener {

private SensorManager mSensorManager;

private Sensor mRotationVector;

private Sensor mAccelerometer;

private TextView mTextView4;

private TextView mTextView5;

private TextView mTextView6;

private TextView mTextView7;

private TextView mTextView8;

float a, b, c, d, x, y, z, xyz;

float[] retVals = new float[3];

float avg = 10;

float factor = (float) 1.15;

ArrayList accelData = new ArrayList();

public int peakCounter = 0;

public int underAvgCounter = 0;

public void countSteps() {

int n = 0;

float controlPoint = accelData.get(0);

while (accelData.iterator().hasNext()) {

if (accelData.get(n) != accelData.get(n + 1)) {

if (accelData.get(n) > accelData.get(n + 1)) {

if (accelData.get(n) < controlPoint) {

n++;

} else {

if (accelData.get(n) < avg * factor) {

underAvgCounter++;

}

peakCounter++;

n++;

}

} else {

controlPoint = accelData.get(n + 1);

n++;

}

} else {

n++;

}

peakCounter -= underAvgCounter;

}

}

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextView4 = (TextView) findViewById(R.id.textView4);

mTextView5 = (TextView) findViewById(R.id.textView5);

mTextView6 = (TextView) findViewById(R.id.textView6);

mTextView7 = (TextView) findViewById(R.id.textView7);

mTextView8 = (TextView) findViewById(R.id.textView8);

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

mAccelerometer = mSensorManager

.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

accelData.add((float) 0);

}

protected void onResume() {

super.onResume();

mSensorManager.registerListener(this, mAccelerometer,

SensorManager.SENSOR_DELAY_GAME);

}

protected void onPause() {

super.onPause();

mSensorManager.unregisterListener(this);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

// TODO Auto-generated method stub

}

@Override

public void onSensorChanged(SensorEvent event) {

x = event.values[0];

y = event.values[1];

z = event.values[2];

xyz = (float) Math.sqrt((x * x) + (y * y) + (z * z));

accelData.add(xyz);

mTextView7.setText("magnitude accel " + xyz);

countSteps();

mTextView8.setText("steps " + peakCounter);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值