1

我有一个方法in2.getImagesOneDim(),它给了我一个整数数组,更准确地说是图像的像素值。现在我想创建一个包含所有图像的所有像素值的大数组。因此,我必须多次调用此方法。现在我想将前一个输出连接到当前输出,直到所有图像都被读取。

在某种伪代码中,其中 + 是一个连接 ... :

 for (int i = 1; i < 25; i++) {
  ConArray = ConArray + in2.getImagesOneDim("../images/"+i);
 }

我将如何在 java 中做到这一点?

4

3 回答 3

1

将大问题拆分为许多小问题,您会找到方法:

  1. 将每个图像读入单独的数组
  2. 计算总大小
  3. 加入子数组

查看示例

import java.util.Arrays;

public class ImageProgram {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(new ImageReader().readImages()));
    }
}

class ImageReader {

    public int[] readImages() {
        int[][] images = readImagesInto2DArray();
        return makeOneDimensionArray(images);
    }

    private int[] makeOneDimensionArray(int[][] arrays) {
        int totalLength = computeTotalLength(arrays);
        int[] array = new int[totalLength];
        int destPos = 0;
        for (int[] subArray : arrays) {
            System.arraycopy(subArray, 0, array, destPos, subArray.length);
            destPos += subArray.length;
        }
        return array;
    }

    private int computeTotalLength(int[][] arrays) {
        int length = 0;
        for (int[] subArray : arrays) {
            length += subArray.length;
        }
        return length;
    }

    private int[][] readImagesInto2DArray() {
        int size = 24;
        int[][] result = new int[size][];
        for (int i = 0; i < size; i++) {
            result[i] = readArray(i + 1);
        }
        return result;
    }

    private int[] readArray(int index) {
        // read from file
        int[] result = new int[index];
        Arrays.fill(result, index);
        return result;
    }
}
于 2012-11-18T11:34:44.987 回答
0
List<int[]> pixels = new ArrayList<int[]>();
for (int i = 1; i < 25; i++) {
    pixels.add(in2.getImagesOneDim("../images/"+i));
}
return pixels;

现在您有了所有数据的列表,您可以使用pixels.get(index);

于 2012-11-18T10:51:27.763 回答
0

您可以使用该Collections#addAll方法。

List<Integer> allIntegers = new ArrayList<Integer>();

for (int i = 1; i < 25; i++) {
    Integer[] imageIntegers = in2.getImagesOneDim("../images/"+i);
    allIntegers.addAll(Arrays.asList(imageIntegers));
}

return allIntegers.toArray();
于 2012-11-18T11:20:39.003 回答