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];
}
}