【问题标题】:How to change an ArrayList into a 2D array in Java如何在 Java 中将 ArrayList 更改为二维数组
【发布时间】:2017-03-16 02:26:27
【问题描述】:

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

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));
            }
         }
      }
}

【问题讨论】:

  • int[][] square; 声明一个新数组。我不认为那是你想要的。需要在构造函数中初始化this.square
  • 你遇到什么问题?
  • 如果您不需要int[][],那么我在this post 上回复了List
  • 凯特琳,我很乐意满足您的期望。请你回复我的回答,告诉我好不好?

标签: java arrays arraylist multidimensional-array magic-square


【解决方案1】:

在确定完美正方形时有一个错字

应该是

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; 
    }
}

【讨论】:

    【解决方案2】:

    我看到两种情况:

    1. 用户在开头给出尺寸
    2. 用户没有。

    广告。 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();
        }
    }
    

    广告。 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++);
        }
    }
    

    显然,您需要注意错误处理。如果您还有其他问题,请在 cmets 中提问。如果你有兴趣,我会更新我的答案。

    【讨论】:

    • @CaitlynDaly 在Stack Overflow 上而不是写“谢谢”,我们赞成并将答案标记为已接受。以防万一,您想加入社区,我强烈建议您阅读How to Askminimal reproducible example。特别是第二个将教你如何以一种方式提问,我不需要猜测我们在谈论哪种情况。祝你好运Stack Overflow
    猜你喜欢
    • 2020-10-04
    • 2020-11-15
    • 2012-06-23
    • 2011-07-01
    • 1970-01-01
    • 2016-03-15
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多