如何从java中的数组返回一个新数组

时间:2015-04-09 11:22:09

标签: java arrays

package test;
import java.util.*;


public class test {
    public int[][] left (int matrix[][]) {

        for(int i=0; i<=3;i++)
            for (int j=2;j>=0;j--)
            {
                if (matrix[i][j] ==0) 
                {
                    for (int k=j+1; k<=3;k++)
                    {
                        matrix[i][k-1]=matrix[i][k];    // chuyen
                    }
                    for (int l=3; l>=0;l--)
                    {
                        if (matrix[i][l] == 0) continue;
                        else matrix[i][l] =0;
                        if (matrix[i][l] != 0) break;
                    }
                }
            }
        return matrix;
    }

    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int i,j;
        int[][] a = new int[3][3];
        for (i=0;i<=2;i++)
             for (j=0;j<=2;j++)
             {
                 System.out.print("input a" +i + j);
                 a[i][j]= in.nextInt();
             }
        left(a);
        for (i=0;i<=2;i++)
        {
             for (j=0;j<=2;j++)
             {
                 System.out.print(a[i][j]);
             }
             System.out.println("");
        }

    }

}

此方法insert作为输入int[][]数组,我想要一个方法来返回一个新数组。例如,我有一个数组。

a[][]= 
{  
0 0 2 0
0 2 0 0 
0 2 2 2 
2 0 0 0 
}

我尝试使用这样的方法:left(a);返回新数组但是它不起作用 我希望返回的新数组如下:

{ 
2 0 0 0  
2 0 0 0  
2 2 2 0 
2 0 0 0 
} 

(左边的增量元素,0除外)

  

此行的多个标记
       - 缺少方法的返回类型
       - 语法错误,插入&#34; ... VariableDeclaratorId&#34;完成
       FormalParameterList

我不知道如何解决这个问题。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我真的很抱歉,但你的代码有很多问题。

  1. left()方法是非静态的,您尝试通过静态方法访问它。它应该给你编译错误。
  2. 您显示的示例数据需要4X4的矩阵,但在main中您将数组声明为int[][] a = new int[3][3]
  3. 您正在使用left()方法循环for(int i=0; i<=3;i++)这应该抛出arrayIndexOutBoundException
  4. 我可以通过将left()方法声明为静态来查看您的评论。请问您是否可以发布工作代码?

    我建议您首先解决上面提到的问题,以便能够使您的代码至少处于工作状态。

答案 1 :(得分:0)

TODO:
1。请注意 @Shirish 所说的所有问题 2。不要使用Primitive数组,因为Collections适用于Class类型。例如:Integer[][] a=new Integer[3][3];
3. 输入后运行以下代码并显示代码。(不要调用left(a)方法)

  

左侧的增量元素,除了0

我在这里应用的是 - 从数组中取出每一行并按降序排序。

    for (Integer[] item : a) {
        Arrays.sort(item,Collections.reverseOrder());
    }

希望它能解决问题。

最终代码:

public class MyArray {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int i, j;
        Integer[][] a = new Integer[3][3];
        for (i = 0; i <= 2; i++)
            for (j = 0; j <= 2; j++) {
                System.out.print("input a" + i + j);
                a[i][j] = in.nextInt();
            }
        // left(a);
        for (Integer[] item : a) {
            Arrays.sort(item, Collections.reverseOrder());
        }

        for (i = 0; i <= 2; i++) {
            for (j = 0; j <= 2; j++) {
                System.out.print(a[i][j]);
            }
            System.out.println("");
        }
    }
}