如何在 Java 中将 ArrayList 更改为二维数组
How to change an ArrayList into a 2D array in Java
我应该制作一个程序来测试用户输入的矩阵是否为幻方。基本上我应该将用户输入放入一个 ArrayList 中,然后将其放入一个二维数组中,然后可以使用该二维数组计算行、列和对角线的总和,看看它们是否具有相同的总和。这是我到目前为止所拥有的。我无法让 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));
}
}
}
}
我看到两种情况:
- 开头用户给出尺寸
- 用户没有。
广告。 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++);
}
}
显然您需要注意错误处理。如果您还有其他问题,请在评论中提问。如果您有兴趣,我会更新我的答案。
识别完美正方形时有错字
应该是
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;
}
}
我应该制作一个程序来测试用户输入的矩阵是否为幻方。基本上我应该将用户输入放入一个 ArrayList 中,然后将其放入一个二维数组中,然后可以使用该二维数组计算行、列和对角线的总和,看看它们是否具有相同的总和。这是我到目前为止所拥有的。我无法让 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));
}
}
}
}
我看到两种情况:
- 开头用户给出尺寸
- 用户没有。
广告。 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++);
}
}
显然您需要注意错误处理。如果您还有其他问题,请在评论中提问。如果您有兴趣,我会更新我的答案。
识别完美正方形时有错字
应该是
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;
}
}