这是我到目前为止的代码:
public static int mode(int[][] arr) {
ArrayList<Integer> list = new ArrayList<Integer>();
int temp = 0;
for(int i = 0; i < arr.length; i ++) {
for(int s = 0; s < arr.length; s ++) {
temp = arr[i][s];
关于如何将[i][s]
转换为单维数组,我似乎陷入了困境。当我执行print(temp)
时,我的2D数组的所有元素按顺序打印出一次,但无法弄清楚如何将它们放入1D数组中。我是新手:(
如何将2D数组转换为1D数组?
我正在使用的当前2D数组是3x3。我试图找到2D阵列中所有整数的数学模式,如果该背景具有任何重要性。
答案 0 :(得分:8)
你几乎做对了。只是一个微小的变化:
public static int mode(int[][] arr) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
// tiny change 1: proper dimensions
for (int j = 0; j < arr[i].length; j++) {
// tiny change 2: actually store the values
list.add(arr[i][j]);
}
}
// now you need to find a mode in the list.
// tiny change 3, if you definitely need an array
int[] vector = new int[list.size()];
for (int i = 0; i < vector.length; i++) {
vector[i] = list.get(i);
}
}
答案 1 :(得分:3)
更改为:
for(int i = 0; i < arr.length; i ++) {
for(int s = 0; s < arr[i].length; s ++) {
temp = arr[i][s];
答案 2 :(得分:3)
“如何将2D数组转换为1D数组?”
String[][] my2Darr = .....(something)......
List<String> list = new ArrayList<>();
for(int i = 0; i < my2Darr.length; i++) {
list.addAll(Arrays.asList(my2Darr[i])); // java.util.Arrays
}
String[] my1Darr = new String[list.size()];
my1Darr = list.toArray(my1Darr);
答案 3 :(得分:2)
我不确定您是否尝试将2D数组转换为1D数组(如问题所述),或者将2D数组中的值放入您拥有的ArrayList中。我会假设第一个,但我会很快说出你需要做的就是调用list.add(temp)
,尽管在你当前的代码中实际上不需要temp
。
如果你想要一个1D数组,那么下面的代码就足够了:
public static int mode(int[][] arr)
{
int[] oneDArray = new int[arr.length * arr.length];
for(int i = 0; i < arr.length; i ++)
{
for(int s = 0; s < arr.length; s ++)
{
oneDArray[(i * arr.length) + s] = arr[i][s];
}
}
}
答案 4 :(得分:1)
我知道它已经被回答了,但这是我的看法。此函数将使用2d数组输入,并返回1d数组输出。
public int[] output(int[][] input){
int[] out = new int[input.length * input[0].length]
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < input[i].length; j++) {
out[i + (j * input.length)] = input[i][j]
}
}
return out;
}
答案 5 :(得分:0)
导入java.util。*;
公共类主要{
public static int A[][] = new int[3][3];
public static int B[] = new int[9];
public static void main(String[] args) {
int temo = 0,t;
Scanner s = new Scanner(System.in);
System.out.println("Enter No for Matrix A");
for (int row = 0; row < A.length; row++) {
for (int col = 0; col < A.length; col++) {
A[row][col] = s.nextInt();
}
System.out.print("\n");
}
for (int row = 0; row < A.length; row++) {
for (int col = 0; col < A.length; col++) {
t= A[row][col];
B[temo]= t;
temo++;
}
System.out.print("\n");
}
System.out.print("After Converted to one d \n");
for(int i =0;i<B.length;i++) {
System.out.print(" "+B[i]+" ");
}
}
}
答案 6 :(得分:0)
在Java 8中,您可以使用对象流将矩阵映射到向量。
将任意类型和任意长度的对象矩阵转换为向量(数组)
String[][] matrix = {
{"a", "b", "c"},
{"d", "e"},
{"f"},
{"g", "h", "i", "j"}
};
String[] array = Stream.of(matrix)
.flatMap(Stream::of)
.toArray(String[]::new);
如果您正在寻找int特定的方式,我会寻求:
int[][] matrix = {
{1, 5, 2, 3, 4},
{2, 4, 5, 2},
{1, 2, 3, 4, 5, 6},
{}
};
int[] array = Stream.of(matrix) //we start with a stream of objects Stream<int[]>
.flatMapToInt(IntStream::of) //we I'll map each int[] to IntStream
.toArray(); //we're now IntStream, just collect the ints to array.
答案 7 :(得分:0)
System.arraycopy应该比我们可以写的任何东西都要快。还可以在行上使用内置的Java迭代器。这是双数组的示例。您应该可以使用任何类型或类。如果行的长度都相同,则totalNumberElements = array2D.length * array2D [0] .length;
static double[] doubleCopyToOneD(double[][] array2D, int totalNumberElements) {
double[] array1D = new double[totalNumberElements];
int pos = 0;
for (double[] row: array2D) {
System.arraycopy(row, 0, array1D, pos, row.length);
pos += row.length;
}
return array1D;
}