0

作成したリストを使用して 2 次元配列を作成するメソッドを作成しようとしています。これは明らかに非常に基本的なJavaであり、私はまったく新しいので、ご容赦ください。これが私のコードです:

import java.util.*;

public class MagicSquare 
{
static final int rows = 4;
static final int columns = 4;
static final int listSize = 16;
static int row, col;
static Scanner console = new Scanner (System.in);

public static void createArithmeticSeq(int [] list)
{   
    int first; 
    int diff;
    //prompt user for first and diff
    System.out.println("Enter first and diff : ");
    first = console.nextInt();
    diff  = console.nextInt();
    //process to create list of 16 elements 
    for (int i=0; i<listSize; i++)
    {
        list[i]=first+i*diff;
    }
}
//this is where I'm having trouble
public static void matricize (int [] list, int [][] matrix)
{
//loop through each row
    for (row=0; row<matrix.length; row++)
    {
    //loop through each column
        for (col=0; col<matrix[row].length; col++)
        {
        //populate matrix with values from list

                matrix[row][col]=**????**;
        }
    }
}
public static void printMatrix(int [][] matrix)
{

    for (row=0; row < matrix.length; row++)
    {
        for (col=0; col < matrix[row].length; col++)
            System.out.printf("%2d" + " ", matrix[row][col]);

        System.out.println();
    }
    //ToDo
}

public static void reverseDiagonal(int [] [] matrix)
{
    //ToDo
}

public static void magicCheck(int [] list, int [] [] matrix)
{
    //ToDo
}

public static void main (String [] args)
{
    int [] list = new int [listSize];
    int [] [] matrix = new int [rows] [columns];
    createArithmeticSeq (list);
    matricize(list, matrix);
    printMatrix(matrix);
    reverseDiagonal(matrix);
    printMatrix(matrix);
    magicCheck(list, matrix);   
}

}

もちろん、まだ行っていない方法は無視してください。最初にこれを理解する必要があります。

4

1 に答える 1

0

リストが行列要素を線形配列に格納しているように見えますが、メソッドでデータを行列として再編成したいと考えていますmatricize

最も簡単な方法は、リストに個別のインデックスを保持し、マトリックスに入力するときにインクリメントすることです。リストが行列要素を行優先順で格納する場合、次のようにすることができます。

public static void matricize (int [] list, int [][] matrix)
{
    int listIndex = 0;
    //loop through each row
    for (row=0; row<matrix.length; row++)
    {
        //loop through each column
        for (col=0; col<matrix[row].length; col++)
        {
            //populate matrix with values from list
            matrix[row][col] = list[listIndex++];
        }
    }
}

リストが列優先の順序になっている場合は、ループがネストされている順序を逆にします。

于 2013-06-10T03:25:11.593 に答える