我有一个方法in2.getImagesOneDim()
,它给出了一个整数数组,更准确地说是图像的像素值。现在我想创建一个包含所有图像的所有像素值的大数组。因此,我必须多次调用此方法。现在我想将先前的输出连接到当前输出,直到读取所有图像。
在某种伪代码中,+是一个连接......:
for (int i = 1; i < 25; i++) {
ConArray = ConArray + in2.getImagesOneDim("../images/"+i);
}
我将如何在java中执行此操作?
答案 0 :(得分:1)
将大问题分解成更小的问题并找到方法:
参见示例
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();