Java 代码不适用于数组(arraylist中有多个数组)

Java 代码不适用于数组(arraylist中有多个数组),java,arrays,arraylist,Java,Arrays,Arraylist,嗨,我对数组有点小问题 代码如下: int frame_size = 410; int frame_shift = 320; ArrayList<double[]> frames = new ArrayList<double[]>(); for (int i = 0; i + frame_size < inbuf.length; i = i + frame_shift) { double[] f

嗨,我对数组有点小问题

代码如下:

int frame_size = 410;
        int frame_shift = 320;
        ArrayList<double[]> frames = new ArrayList<double[]>();
        for (int i = 0; i + frame_size < inbuf.length; i = i + frame_shift) {
            double[] frame = new double[frame_size];
            System.arraycopy(inbuf, i, frame, 0, frame_size);
            frames.add(frame);
        }
请帮我解决这个问题!)

(提前谢谢你)

更新

int frame_size = 410;
        int frame_shift = 320;
        ArrayList<double[]> frames = new ArrayList<double[]>();
        for (int i = 0; i + frame_size < inbuf.length; i = i + frame_shift) {
            double[] frame = new double[frame_size];
            System.arraycopy(inbuf, i, frame, 0, frame_size);
            frames.add(frame);
        }

        int[] Cover = new int[frames.size() * nParam];

        for (int i = 0; i < frames.size(); i++) {
            double[] finMc = Gos.getVek(frames.get(i));
            for (int c = 0; c < finMc.length; c++) {
                int mc = (int) finMc[c];
                Cover[i * frames.size() + c] = (int) finMc[c];
            }
        }
toDoubleArray

public static double[] toDoubleArray(byte[] byteArray) {
    int times = Double.SIZE / Byte.SIZE;
    double[] doubles = new double[byteArray.length / times];
    for (int i = 0; i < doubles.length; i++) {
        doubles[i] = ByteBuffer.wrap(byteArray, i * times, times)
                .getDouble();
    }
    return doubles;
}
publicstaticdouble[]toDoubleArray(byte[]byteArray){
整数倍=Double.SIZE/Byte.SIZE;
double[]doubles=新的double[byteArray.length/times];
对于(int i=0;i
代码无效:

int frame_size = 410;
        int frame_shift = 320;
        ArrayList<double[]> frames = new ArrayList<double[]>();
        for (int i = 0; i + frame_size < inbuf.length; i = i + frame_shift) {
            double[] frame = new double[frame_size];
            System.arraycopy(inbuf, i, frame, 0, frame_size);
            frames.add(frame);
        }


        double[] Cover = new double[frames.size() * nParam];

        for (int i = 0; i < frames.size(); i++) {
            double[] finMc = Gos.getVek(frames.get(i));
            for (int c = 0; c < finMc.length; c++) {
                Cover[i * frames.size() + c] = finMc[c];
            }
        }
int frame\u size=410;
int frame_shift=320;
ArrayList frames=新的ArrayList();
对于(int i=0;i+frame\u size
我立刻想到了几个想法:

(一)
for(int m=0;m

每次通过循环时,此块在
0
处开始
m
。这意味着您总是在
Cover
数组的同一部分上进行写入。所以有效地说,存储的只是最后一帧的数据。你可能是说

for(int m = i * frames.size(); m < (i+1)*frames.size(); i++) {
    Cover[m] = mc;
}
2)
intmc=(int)finMc[c]

该行将值强制转换为
int
,该int将截断存储在
finMc[c]
中的值。如果
finMc[c]
介于
0
1
之间,则在复制和铸造数据时将产生
0
。上一个问题使这一点更加复杂,它确保只复制最后一帧的数据。这可以简单地通过移除cast并将Cover声明为
double
s数组而不是
int
s数组来解决

因此,总之,如果以这种方式编写代码,可能会更好一些:

double[] Cover = new double[frames.size() * nParam];

for (int i = 0; i < frames.size(); i++) {
    double[] finMc = Gos.getVek(frames.get(i));
    for (int c = 0; c < finMc.length; c++) {
        Cover[i * frames.size() + c] = finMc[c];
    }
}
double[]Cover=新的double[frames.size()*nParam];
对于(int i=0;i
您遇到了什么问题?“所有这些代码都不起作用”是什么意思?我写的数组的所有元素都是零覆盖。这就是为什么它没有从数字中提取出来的arraylist,很明显..然后我只需要使用数组覆盖,他仍然是零覆盖。非常感谢!但是我写的代码不是很好,不要告诉我替换什么?)如果没有关于问题域的更多信息和更多上下文,很难说正确的修复方法是什么。我会在我的答案中加入我的想法,但请恕我直言。我可以给你额外的信息。inbuf数组的长度为-1024。frames length-3。(数组中的数组)finMc的长度为14。我的意思是更多地了解这段代码的功能。很难从代码中推断意图,但我已经猜到了。更新后的答案能解决您的问题吗?是的,您是对的,我想将所有阵列组合成一个无损阵列
int frame_size = 410;
        int frame_shift = 320;
        ArrayList<double[]> frames = new ArrayList<double[]>();
        for (int i = 0; i + frame_size < inbuf.length; i = i + frame_shift) {
            double[] frame = new double[frame_size];
            System.arraycopy(inbuf, i, frame, 0, frame_size);
            frames.add(frame);
        }


        double[] Cover = new double[frames.size() * nParam];

        for (int i = 0; i < frames.size(); i++) {
            double[] finMc = Gos.getVek(frames.get(i));
            for (int c = 0; c < finMc.length; c++) {
                Cover[i * frames.size() + c] = finMc[c];
            }
        }
for(int m = i * frames.size(); m < (i+1)*frames.size(); i++) {
    Cover[m] = mc;
}
for (int c = 0; c < finMc.length; c++) {
    Cover[i * frames.size() + c] = (int)finMc[c];
 }
double[] Cover = new double[frames.size() * nParam];

for (int i = 0; i < frames.size(); i++) {
    double[] finMc = Gos.getVek(frames.get(i));
    for (int c = 0; c < finMc.length; c++) {
        Cover[i * frames.size() + c] = finMc[c];
    }
}