Java 二维阵列-指定新二维阵列的数量

Java 二维阵列-指定新二维阵列的数量,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有一个由两个数字组成的二维数组,它是48乘48,我正在尝试制作一种方法,允许用户选择一个特定的数量,例如=7乘7,然后将其放入一个新的二维数组中 public static double[][] amountOTP(double [][] a, int x){ a = new double[x][x]; return a; } 这就是我现在所拥有的一切,它将2d数组作为输入,但是即使我指定了x,它也不起作用。我想这是您正在寻找的东西: public static double

我有一个由两个数字组成的二维数组,它是48乘48,我正在尝试制作一种方法,允许用户选择一个特定的数量,例如=7乘7,然后将其放入一个新的二维数组中

public static double[][] amountOTP(double [][] a, int x){
    a = new double[x][x];
    return a;
}

这就是我现在所拥有的一切,它将2d数组作为输入,但是即使我指定了x,它也不起作用。

我想这是您正在寻找的东西:

public static double[][] amountOTP(double [][] a, int x){
    double [][] ret = new double[x][x];

    for(int i = 0; i < x; i++)
        for(int j = 0; j < x; j++)
            ret[i][j] = a[i][j];
    return ret;
}
publicstaticdouble[]amounttp(double[]a,intx){
double[]ret=新的double[x][x];
对于(int i=0;i

但是您必须小心使用参数,因为它可能导致IndexOutOfBounds异常

如果我错了,很抱歉,但我现在假设您希望您的方法返回一个较小的2d数组,该数组包含给定数组的一些值,在这种情况下,您需要将您的方法更改为:

public static double[][] amountOTP(double [][] a, int x) {
   double[][] b = new double[x][x];
   x = Math.min(x, a.length);
   for(int i = 0;i < x; i++)
      for(int j = 0;j < x; j++)
         b[i][j] = a[i][j];
   return b;
}
publicstaticdouble[]amounttp(double[]a,intx){
double[]b=新的double[x][x];
x=数学最小值(x,a.长度);
对于(int i=0;i
这应该可以很好地工作,但是如果我遗漏了什么或者它不起作用,请随意评论并通知我;我是来帮忙的。不管怎样,我希望这对你有用。(另外,如果这不是你想要的答案,请随时告诉我。)


注意:这应该避免
indexootfbounds
异常,因此如果用户给出的
x
值大于
a
的大小,它仍然可以正常工作。此方法返回的2d数组将只有一些值为零,但它找不到任何数字。

下面的解决方案考虑了请求的新二维数组长度大于原始数组长度的情况,在这种情况下,我们只返回原始数组

例如:

public static double[][] amountOTP(double [][] a, int x){
       if(x > a.length) return a;
       for (double[] arr : a)
          if(arr.length < x)
             return a;

       double[][] newArray = new double[x][x];
       for (int i = 0; i < x; i++)
          for (int j = 0; j < x; j++)
             newArray[i][j] = a[i][j];

       return newArray;
}
publicstaticdouble[]amounttp(double[]a,intx){
如果(x>a.length)返回a;
对于(双[]arr:a)
如果(arr.length
当您想将其切割成更小的尺寸并复制原始阵列的一部分时,这应该可以:

public static double [][] cutArray (double [][] a, int newSize){
  if (x > a.length)
     throw new IllegalArgumentException ("Can only make array smaller");
  double [][] b = new double [newSize][newSize];
  for (int i = 0; i < newSize; i++){
    for (int j = 0; j < newSize; j++){
      b [i][j] = a [i][j];
    }
  }
  return b;
}
publicstaticdouble[]cutArray(double[]a,int-newSize){
如果(x>a.长度)
抛出新的IllegalArgumentException(“只能使数组变小”);
double[]b=新的双精度[newSize][newSize];
对于(int i=0;i
您实际上还没有初始化数组,因此方法应该如下所示

public static void main(String[] args)
    {
        double[][] a=amountOTP(3);
        for(int j=0;j<a.length;++j)
        {
            for(int i=0;i<a[j].length;++i)
            {
                a[j][i]=2;
            }
        }
        for(int j=0;j<a.length;++j)
        {
            for(int i=0;i<a[j].length;++i)
            {
                System.out.println(a[j][i]);
            }
        }


    }
    public static double[][] amountOTP(int x)
    {
        return new double[x][x];

    }
publicstaticvoidmain(字符串[]args)
{
双[][]a=amounttp(3);

对于(int j=0;j我知道您已经有了很多答案,但是没有人使用优秀的array.copyOf Java API方法:

public static double[][] amountOTP(double [][] a, int x){
    a = Arrays.copyOf(a, x);
    for(int i=0; i<a.length; i++) {
        if(a[i] != null) {
            a[i] = Arrays.copyOf(a[i], x);
        } else {
            a[i] = new double[x]; // allows growth
        }
    }
    return a;
}
publicstaticdouble[]amounttp(double[]a,intx){
a=数组.copyOf(a,x);

对于(int i=0;i新数组到底应该包含什么?“它不工作”-这意味着什么?您希望发生什么,而不是发生什么?您的意思是希望将2d数组的大小减少到用户指定的数字大小?(因此基本上使2d数组变小,但保留其值?)@AlexanderDaum我的2d数组矩阵是48乘48,基本上我想用这个方法制作一个新的2d数组,只包含原始2d数组中7乘7的数据array@YorickIsTheBest对sir@JokesOnyou没问题!很高兴我能提供帮助。@OsumaneMahyDiaw如果长度小于原始数组,则为“是”。将复制值。(但不是所有的,只是适合的。)我假设
a
中的1d数组大小相同,等于
a
本身的长度,使2d数组成为正方形。如果OP需要,我将编辑我的答案以适应非正方形的矩阵。
x@PatrickParker忘记了空格,所以我现在添加它,但是
Math.min
x
是一个整数…@yorickis最好是,它也适用于整数。为了清晰起见,有些人可能更喜欢它而不是三元运算符,尤其是在回答问题时beginners@JokesOnyou如果有此帮助,您可以接受它,因为应答描述与代码不匹配:“请求的长度…小于原始长度”应读“大于”