在程序中存储二维数组的最佳方法

问题描述 投票:0回答:1

好吧,我正在开始一个小型的面向对象的程序,但我仍然需要帮助来理解模型类。

我有5个类文件。UFile.java, 菜单.java, UInput.java, UImport.javaUMath.java

还有一个模型类。Matrix. java

每个类文件都有相当的解释力

  • UFile.java: 处理来自.csv的文件输入并写入.csv。

    菜单.java 为用户提供了选择他们想要做什么的提示。

    UInput.java 处理用户的输入并进行验证

    UMath.java 处理任何与数学相关的算法

    UImport.java 导入数组到程序中

我用自己的测试文件对每个文件进行了测试,它们都能正常工作。

大问题 我有的是如何将我的Matrix数组成功地存储到程序中,所有的东西都是动态的,所以没有硬写的代码,我需要能够用我的UFile.java导入它,然后用我的UMath.java对它进行乘法,同时还要对它进行验证,确保没有一个元素是空的或无效的。

如果这是一个愚蠢的问题,我很抱歉,但我已经搜索了很多,但无法找到一个明确的答案。

例如:如果我用我的menu.java文件导入一个矩阵,它就会是这样的。

Menu.java。

    public static void main(String[] args){

    Scanner s = new Scanner(System.in);
    int selection;

    do{
        System.out.println("Please select\n" +
                        "1 Import Matrix\n" +
                        "2 Multiply Matrix\n" +
                        "3: Exit\n");
        selection = s.nextInt();

        switch(selection)
        {
            case 1: 
                importMatrix();
                break;
            case 2:
                multiplyMatrix();
                break;
            case 3:
                System.out.println("Goodbye!");
                break;
            default:
                System.out.println("Invalid Input");
        }
    } while(selection != 3);
}

然后是importMatrix静态类,这就导致了导入类。

private static void importMatrix(){

    UImport.fileIn();

我开始在如何存储矩阵上遇到了麻烦,我已经能够将一个硬编码的数组存储为全局变量,但我不确定如何存储它,因为它应该是动态的。

这就是我现在所拥有的,但这是行不通的,因为我需要在整个程序中使用和编辑这个数组。

private static void fileIn() {
    String file;

    file = UInput.userIn("Please enter the file name");

    int[][] matrixA = UFile.readFile(file);

我的类仍然需要完成。

public class Matrix{

private int [][] MatrixA
private int [][] MatrixB


public Matrix(){


}


public Matrix(int [][] MatrixA, int [][] MatrixB){
    setMatrixA(inMatrixA);
    setMatrixB(inMatrixB);
}

public Matrix(Matrix inMatrix){
    MatrixA = inMatrix.getMatrixA();
    MatrixB = inMatrix.getMatrixA();
}

public void setMatrixA(String inMatrixA){
    if(validateMatrixA(inMatrixA))
    {
        MatrixA = inMatrixA;
    }
    else
    {
        throw new IllegalArgumentException("Invalid Matrix");
    }
}

public void setMatrixB(int inMatrixB){
    if(validateMatrixB(inMatrixB))
    {
        MatrixB = inMatrixB;
    }
    else
    {
        throw new IllegalArgumentException("Invalid Matrix");
    }
}


//ACCESSORS
public int [][] MatrixA(){
    return MatrixA;
}

public int [][] getMatrixB(){
    return MatrixB;
}

public boolean equals(Object inObj){
    boolean same = false;
    if(inObj instanceof Matrix)
    {
        Matrix inMatrix = (Matrix)inObj;
        same = MatrixA.equals(inMatrix.getMatrixA()) && 
               MatrixB.equals(inMatrix.getMatrixB());
    }
    return same;
}

public Matrix clone()
{
    return new Matrix(this);
}

public String toString()
{
    return ();
}

public String toFileString()
{

}
}

如果我漏掉了什么重要的东西,请告诉我,我是个初学者,所以我不确定。

java arrays object multidimensional-array model
1个回答
0
投票

如果要存储的元素数量等于数组的大小,那么固定大小的数组是可以的。但是,如果不是这种情况(例如,如果要存储的元素数量可以小于或多于指定的大小),你应该使用一个叫做 收藏 例如 阵列列表 它是一种动态数组(即自动增长)。这将在很多方面帮助你。

  1. 如果要存储的元素数量小于指定的大小,你将节省内存。
  2. 当你需要存储的元素数量超过你已经指定的数量时,你不需要为了增加数组的大小而改变你的代码。
  3. 列表中的 Collection 提供了一个丰富的API来处理元素。通过利用这个API,你的代码可以变得更紧凑、更有性能、更可维护等。
© www.soinside.com 2019 - 2024. All rights reserved.