如何在Java中将ArrayList更改为2D数组

如何在Java中将ArrayList更改为2D数组,java,arrays,arraylist,multidimensional-array,magic-square,Java,Arrays,Arraylist,Multidimensional Array,Magic Square,我应该制作一个程序来测试用户输入的矩阵是一个幻方。基本上,我应该将用户输入放入一个ArrayList,然后将其放入一个2D数组,然后可以使用该数组计算行、列和对角线的和,以查看它们是否具有相同的和。这就是我目前所拥有的。我无法让ArrayList生成2D数组 import java.util.*; class Square { private int[][] square; private ArrayList<Integer> numbers; public in

我应该制作一个程序来测试用户输入的矩阵是一个幻方。基本上,我应该将用户输入放入一个ArrayList,然后将其放入一个2D数组,然后可以使用该数组计算行、列和对角线的和,以查看它们是否具有相同的和。这就是我目前所拥有的。我无法让ArrayList生成2D数组

import java.util.*;

class Square
{
   private int[][] square;
   private ArrayList<Integer> numbers;
   public int numInput;

   public Square()
   {
      numbers = new ArrayList<Integer>(); 
      int[][] square;
      numInput = 0;
   }

   public void add(int i)
   {
      numbers.add(i);
   }
}

   public boolean isSquare()
   {
      numInput = numbers.size();
      double squared = Math.sqrt(numInput);

      if (squared != (int)squared)
      {
         System.out.println("Numbers make a square");
         return true;
      }
      else
      {
         System.out.println("Numbers do not make a square");
         return false;
      }
   }

      public String isMagicSquare()
      {

         for (int row=0; row<numInput; row++) 
         {
            for (int col=0; col<numInput; col++)
            {
               square[row][col] = number.get(col +( number.size() * row));
            }
         }
      }
}
import java.util.*;
阶级广场
{
私人国际[][]广场;
私有数组列表数;
公共国际货币单位;
公众广场()
{
数字=新的ArrayList();
int[][]平方;
numInput=0;
}
公共空白添加(int i)
{
增加(i);
}
}
公共布尔isSquare()
{
numInput=numbers.size();
双平方=Math.sqrt(numInput);
如果(平方!=(整数)平方)
{
System.out.println(“数字构成正方形”);
返回true;
}
其他的
{
System.out.println(“数字不是正方形”);
返回false;
}
}
公共字符串isMagicSquare()
{
对于(int row=0;row我看到两种情况:

  • 用户在开始时给出大小
  • 用户没有
  • 广告1.
    无需使用
    ArrayList
    。只需通过以下方式读取输入:

    Scanner s = new Scanner(System.in);
    int n = s.nextInt();
    int[][] array = new int[n][n];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            array[i][j] = s.nextInt();
        }
    }
    
    Scanner s=新的扫描仪(System.in);
    int n=s.nextInt();
    int[][]数组=新的int[n][n];
    对于(int i=0;i
    公元2年

    我只是简单地扫描数字,只要用户给出数字。然后检查他是否给出了适当数量的数字。然后转换成整数的平方数组

    ArrayList<Integer> list = new ArrayList<>();
    Scanner s = new Scanner(System.in);
    while (s.hasNextInt()) {
        list.add(s.nextInt());
    }
    int n = list.size();
    double sqrt = Math.sqrt(n);
    int x = (int) sqrt;
    if(Math.pow(sqrt,2) != Math.pow(x,2)) {
        //wrong input - it wasn't a square
    }
    int[][] array = new int[x][x];
    int index = 0;
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < x; j++) {
            array[i][j] = array.get(index++);
        }
    }
    
    ArrayList list=new ArrayList();
    扫描仪s=新的扫描仪(System.in);
    而(s.hasnetint()){
    添加(s.nextInt());
    }
    int n=list.size();
    双sqrt=数学sqrt(n);
    int x=(int)sqrt;
    if(数学功率(sqrt,2)!=数学功率(x,2)){
    //输入错误-它不是正方形
    }
    int[][]数组=新的int[x][x];
    int指数=0;
    对于(int i=0;i

    显然,您需要注意错误处理。如果您有进一步的问题,请在评论中提问。如果您感兴趣,我将更新我的答案。

    识别完美正方形时有一个输入错误

    public String isMagicSquare() {
        if (isSquare()) {
            int size = (int) Math.sqrt(numbers.size());
            this.square = new int[size][size];
            for (int i = 0; i < numbers.size(); i++) {
                square[i / size][i % size] = numbers.get(i);
            }
            return Arrays.deepToString(square); // do other op on the array and return appropriate String
        } else {
            return null; 
        }
    }
    
    应该是

    if (squared == (int) squared) return true;
    
    如果二维数组是完美的正方形,则可以初始化并填充它

    public String isMagicSquare() {
        if (isSquare()) {
            int size = (int) Math.sqrt(numbers.size());
            this.square = new int[size][size];
            for (int i = 0; i < numbers.size(); i++) {
                square[i / size][i % size] = numbers.get(i);
            }
            return Arrays.deepToString(square); // do other op on the array and return appropriate String
        } else {
            return null; 
        }
    }
    
    公共字符串isMagicSquare(){
    if(isSquare()){
    int size=(int)Math.sqrt(numbers.size());
    this.square=新整数[大小][大小];
    对于(int i=0;i
    int[]square;
    声明一个新数组。我认为这不是您想要的。您需要在构造函数中初始化
    this.square
    。您会遇到什么问题?如果您不需要
    int[]
    ,然后我用一个
    列表回答了一个问题
    Caitlyn,我很想符合你的期望。请你回复我的答案,告诉我答案是好是坏吗?@CaitlynDaly on,而不是写“谢谢”,我们投票并将答案标记为已接受。以防万一,你想加入我强烈建议阅读和阅读的社区。Es特别是第二个问题会教你如何提问,我不需要猜测我们在讨论哪种情况。祝你好运!