迭代地连接整数数组

时间:2012-11-18 10:45:22

标签: java arrays

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

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

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

我将如何在java中执行此操作?

3 个答案:

答案 0 :(得分:1)

将大问题分解成更小的问题并找到方法:

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

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

答案 1 :(得分: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);

获取数据

答案 2 :(得分: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();