所以,我应该使用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;
}
}
}
}
答案 0 :(得分:0)
我在这里有点困惑,所以我会指出一些我注意到的事情。
首先,由于变量名称,很难理解您的代码。
也没有一个方法是静态的,所以我真的不明白你为什么要为计算引入两个矩阵,然后将它们设置为你在两个方法的开始时创建的前两个矩阵。
接下来,在减法方法中使用for循环后有两个括号,我猜测在StackOverflow中粘贴时只是一个拼写错误。
你添加总和的myArray对象也不会累积所有总和,因为每次循环都会创建一个新的arraylist。在循环外创建它。
NullPointerException可能真的在任何地方,很难分辨,因为代码有点令人困惑。
我建议使用LWJGL库,其中包含Matrix4f
类和Matrix4f.add();
等方法,可帮助您完成此任务。
答案 1 :(得分:0)
尝试在debug
模式下运行您的程序,以便了解哪条语句为您提供null pointer exception
。
我注意到你的行和列是静态的,但你可以在构造函数中更改它们。似乎那里存在逻辑错误。如果你之前没有给出它们的初始值,这两个可能是你的例外的原因。
如果您的矩阵可以有不同的rows
和columns
,那么您绝对不应该使用static
。
要真正了解nullpointerexception
的位置,您还应该编写主要代码。但就像我说的那样,在调试模式下,你也可以自己看看。