Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将二维阵列转换为一维阵列_Java_Arrays - Fatal编程技术网

Java 将二维阵列转换为一维阵列

Java 将二维阵列转换为一维阵列,java,arrays,Java,Arrays,以下是我目前掌握的代码: 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 ++) {

以下是我目前掌握的代码:

 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];
公共静态int模式(int[]arr){
ArrayList=新建ArrayList();
内部温度=0;
对于(int i=0;i
在这一点上,我似乎被困在如何将
[I][s]
放入一维数组中。当我执行
打印(temp)
时,我的二维数组中的所有元素都会按顺序一次打印出来,但无法确定如何将它们放入一维数组中。我是一个新手:(

如何将二维阵列转换为一维阵列


我目前使用的2D数组是一个3x3。如果背景很重要,我会尝试找出2D数组中所有整数的数学模式。

你几乎完全正确。只是一个小小的变化:

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);
    }
}
公共静态int模式(int[]arr){
列表=新的ArrayList();
对于(int i=0;i
更改为:

 for(int i = 0; i < arr.length; i ++) {
          for(int s = 0; s < arr[i].length; s ++) {
              temp = arr[i][s];
for(int i=0;i
我不确定您是否正在尝试将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];
    }
  }
}
公共静态int模式(int[]arr)
{
int[]oneDArray=新int[arr.length*arr.length];
对于(int i=0;i
如何将二维数组转换为一维数组?

String[][]my2Darr=…(某物)。。。。。。
列表=新的ArrayList();
for(int i=0;i
导入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]+" ");
     }

在Java8中,可以使用对象流将矩阵映射到向量

将任意类型和任意长度的对象矩阵转换为向量(数组)

如果您正在寻找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.
int[][]矩阵={
{1, 5, 2, 3, 4},
{2, 4, 5, 2},
{1, 2, 3, 4, 5, 6},
{}
};
int[]array=Stream.of(matrix)//我们从对象流开始
.flatMapToInt(IntStream::of)//我将把每个int[]映射到IntStream
.toArray();//现在是IntStream,只需将Int收集到数组中即可。

System.arraycopy应该比我们能写的任何东西都快。还要对行使用内置java迭代器。这里是双数组的示例。您应该能够使用任何类型或类。如果您的行都是相同长度的,那么TotalNumberRelations=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;
}

我知道它已经被回答了,但这是我的答案。这个函数将接受一个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;
}
public int[]输出(int[]输入){
int[]out=new int[input.length*输入[0].length]
for(int i=0;i
非常感谢你,我已经为这件事头痛了好一阵子了,哈哈。@KristopherSperlik欢迎:)它回答了你的问题,考虑接受它-我编辑了你的问题,使它始终是2D->1D。请在将来仔细考虑这些细节,它们是重要的。这是真的。我做了这个假设,因为那个假设是在原始代码中的——也许我应该说清楚了。这里没有原始类型。
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.
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;
}
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;
}