gpt4 book ai didi

Android应用程序编程: Filling a two-dimensional array in a thread

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:49 30 4
gpt4 key购买 nike

我正在尝试校准加速度计,但我无法获得校准所需的 6 个不同加速度读数的 6 个样本值。 PreliminaryW 是一个 double[6][3] 数组,用于填充这些样本值。它是 6 x 3,因为每个加速度读数都有一个 x、y 和 z 分量。

我计划通过在 6 个不同的加速度读数处按下按钮来对它们进行采样。此按钮使“校准”为真。

当然,首先要使“校准”为真以启动此线程。

出于某些深不可测的原因,preliminaryW[i] = currentAcc 似乎从 0 到 i 填充了相同的值,而不仅仅是 i。我确保每次按下“校准”按钮时 currentAcc 都是不同的。

我的代码有什么问题?

public synchronized void run() {
Log.d(TAG, "+ in Calibrator thread +");

int i = -1;
while (calibrating) {
if (calibrate) {
i = i + 1;
calibrate = false;
preliminaryW[i] = currentAcc;
if (i == 5) {
calibrating = false;
}
}
}
}

最佳答案

我不是很熟悉加速度计的内部工作原理,如果不查看更多代码,很难确定它为什么不起作用。例如,您能否确定 Thread 只有一个实例,还是要创建多个实例?

为什么这需要在线程中?

这样的循环也不是好的做法,如果你绝对需要一个线程,你应该使用 wait/notify。 (更多信息在 http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html)

我已经起草了一个类,它大致可以满足您的需求,但不使用线程。您可以创建一个校准器,然后使用每个新值调用 performCalibration():

class Calibrator{
int count = 0;
double[][] preliminaryW = new double[6][3];

public void performCalibration(double[] currentAcc){
preliminaryW[count] = currentAcc;
count++;
}
}

如果没有 Thread 和“忙循环”,您可以省略那些“校准”和“校准”标志,这肯定也有助于调试。

祝你好运!

关于Android应用程序编程: Filling a two-dimensional array in a thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20370349/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com