创建类型为Matrix的方法以添加两个矩阵

时间:2015-04-23 12:06:40

标签: java

所以,我应该使用matrix创建一个HashMap<Integer,ArrayList<Number>>,其中Number是一个实例变量是分子和分母的类。 Class Matrix继承Class Number,其中包含fillMatrix()printMatrix()addMatrix(Matrix,Matrix)subMatrix(Matrix,Matrix)等方法,问题出现在后两种方法中,我做了他们,但我很确定他们完全错了,因为我得到了NullPointerxception,我如何制作这样的方法?  这是代码。

 public class Matrix extends Number implements Calculation
{
public static int rows;
public static int cols;
private ArrayList<Number> myArray;
private ArrayList<Double> myArray2;
private ArrayList<Double> myArray3;
private ArrayList<Double> myArray4;
private HashMap <Integer, ArrayList<Number>> hm;
private HashMap <Integer, ArrayList<Double>> hm2;

public Matrix(int r, int c)
{
    hm = new HashMap<>();
    hm2 = new HashMap<>();
    rows = r;
    cols = c;
}
public void fillMatrix()
{
    Scanner input = new Scanner(System.in);
    myArray = new ArrayList<>();
    myArray2 = new ArrayList<>();
    System.out.println("Enter the number of rows");
    rows = input.nextInt();
    System.out.println("Enter the number of columns");
    cols = input.nextInt();
    Number n = new Number();
    for (int i = 0; i < cols;i++)
    {
        n.setNumerator(i);
        n.setDenominator(i+1);
        myArray.add(new Number(i,i+1));
        double xn = n.getNumerator();
        double xd = n.getDenominator();
         myArray2.add(xn/xd);
    }               
    for (int i = 0; i < rows; i++)
    hm2.put(rows,myArray2);
}

public void printMatrix()
{ 
        for (int i = 0; i < rows; i++)
        {hm.put(rows,myArray);
         System.out.println(myArray3.toString());
        }
}
public Number getItem(int rowNO,int colNO)
{
    rows = rowNO - 1;
    cols = colNO - 1;
   hm.get(rows);
    return myArray.get(cols);
}
public void addMatrices(Matrix a, Matrix b)
{
   Matrix x1 = new Matrix(rows,cols);
   Matrix x2 = new Matrix(rows,cols);
   for(int i = 0; i < rows; i++)
   { x1.hm2.get(rows);
     x2.hm2.get(rows);
   for(int j = 0; j< cols;j++)
   {
     double a1 = x1.myArray2.get(cols);
     double a2 = x2.myArray2.get(cols);
     double sum = a1+a2;
     myArray3 = new ArrayList<>();
     myArray3.add(sum);         
   }
   x1=a;
   x2=b;
   }
}
public void subMatrices(Matrix a, Matrix b)
{
   Matrix x1 = new Matrix(rows,cols);
   Matrix x2 = new Matrix(rows,cols);
   for(int i = 0; i < rows; i++)
   { x1.hm2.get(rows);
   { x2.hm2.get(rows);
   for(int j = 0; j< cols;j++)
   {
     double a1 = x1.myArray2.get(cols);
     double a2 = x2.myArray2.get(cols);
     double sub = a1-a2;
     myArray4 = new ArrayList<>();
     myArray4.add(sub);         
   }
   x1=a;
   x2=b;
   }
 }

  }
  }

2 个答案:

答案 0 :(得分:0)

我在这里有点困惑,所以我会指出一些我注意到的事情。

首先,由于变量名称,很难理解您的代码。

也没有一个方法是静态的,所以我真的不明白你为什么要为计算引入两个矩阵,然后将它们设置为你在两个方法的开始时创建的前两个矩阵。

接下来,在减法方法中使用for循环后有两个括号,我猜测在StackOverflow中粘贴时只是一个拼写错误。

你添加总和的myArray对象也不会累积所有总和,因为每次循环都会创建一个新的arraylist。在循环外创建它。

NullPointerException可能真的在任何地方,很难分辨,因为代码有点令人困惑。

我建议使用LWJGL库,其中包含Matrix4f类和Matrix4f.add();等方法,可帮助您完成此任务。

答案 1 :(得分:0)

尝试在debug模式下运行您的程序,以便了解哪条语句为您提供null pointer exception

我注意到你的行和列是静态的,但你可以在构造函数中更改它们。似乎那里存在逻辑错误。如果你之前没有给出它们的初始值,这两个可能是你的例外的原因。

如果您的矩阵可以有不同的rowscolumns,那么您绝对不应该使用static

要真正了解nullpointerexception的位置,您还应该编写主要代码。但就像我说的那样,在调试模式下,你也可以自己看看。