如何在Java中读取3x3矩阵,直到所有元素都为空?
问题描述:
我是新来的java和有一个小问题。我需要读取一组3x3 java矩阵并打印出来。没什么特别的。问题是我必须阅读它,直到我到达一个矩阵,其中包含所有元素为null并打印所有矩阵及其行列式。我有一个阅读空值的问题,并检查是否都是空值。有什么建议么? LE:这是我到目前为止的内容。但我需要,直到所有元素都为空如何在Java中读取3x3矩阵,直到所有元素都为空?
import java.io.*;
class Matrix3x3
{
public static void main(String args[]) throws IOException
{
BufferedReader BR=new BufferedReader(new InputStreamReader (System.in));
int Number[][]=new int[3][3];
int i,j;
String m;
System.out.println("Enter Elements for Matrix 3x3 :");
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
m=BR.readLine();
if (m == null)
{
m="0";
}
Number[i][j]=Integer.parseInt(m);
}
}
System.out.println("Elements in Matrix are : ");
System.out.println("");
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
System.out.print(Number[i][j]+"\t");
}
System.out.println();
}
int determinantMatrix = determinant(Number, 3 ,3);
System.out.print("Determinant is: "determinantMatrix+"\n");
}
public static int determinant(int[][] result, int rows, int cols) {
if (rows == 2)
return result[0][0] * result[1][1] - result[0][1] * result[1][0];
int determinant1 = 0, determinant2 = 0;
for (int i = 0; i < rows; i++) {
int temp = 1, temp2 = 1;
for (int j = 0; j < cols; j++) {
temp *= result[(i + j) % cols][j];
temp2 *= result[(i + j) % cols][rows - 1 - j];
}
determinant1 += temp;
determinant2 += temp2;
}
return determinant1 - determinant2;
}
}
答
感谢您的编辑,我现在好多了,你的意思理解重复这个过程:“我有一个问题读取空值和检查,如果一切都是空。”
您正在检查从BufferedReader.readLine()
返回的结果是否为null
。这不会告诉你用户是否输入了空值,因为只有当输入流结束时(在控制台上不容易/通常不会发生)时,readLine()
返回null
的唯一时间。
等一下,这意味着用户输入了一个空值?你需要先决定。一种选择是你允许用户输入单词“null”。然后使用m.equals("null")
进行检查。这会工作。另一种选择是关于0的用户输入为空,但如果您需要区分所有零的矩阵和所有空值的矩阵,则这是不可接受的。
接下来,你如何检查矩阵是否包含所有空值?您当前的代码已填写0代表null
。所以简单的答案是你检查矩阵是否包含全零。一种想法是寻找一个非零值,如果你没有找到它,那么所有零都是零。如前所述,如果您需要区分全零矩阵和所有空值矩阵,这种方法并不好。在这种情况下,您可以例如声明您的矩阵Integer[][]
而不是int[][]
。这将允许您填写null
值并将它们与非空值(包括零)区分开来。
请更具描述性。什么是输入的来源?什么是数据结构使用?试图实现这一目标的代码是什么? –
如果* all *元素为空?如果只有* some *元素为空,您将如何计算行列式? – khelwood
输入源是用户输入。如果一些元素为空它们将被考虑为0我猜 –