你的代码有很多问题,最主要的一个吧就是你的inverse函数的参数没传进去,你自己定义一个空矩阵num[][],计算秩,怎么算都是零,然后就返回 null,自然就报空指针异常了。我改好了程序,供你参考:
成都创新互联公司科技有限公司专业互联网基础服务商,为您提供内江机房主机托管,高防物理服务器租用,成都IDC机房托管,成都主机托管等互联网服务。
import java.util.Scanner;
public class Project2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请依次输入:a11、a12、a13、a21、a22、a23、a31、a32、a33\n");
int i, j;
double[][] number = new double[3][3];
double[][] number0 = new double[3][3];
for (i = 0; i 3; i++)
for (j = 0; j 3; j++)
number[i][j] = input.nextDouble();
System.out.println("Input Matrix is :");
System.out.println(number[0][0] + " " + number[0][1] + " "
+ number[0][2]);
System.out.println(number[1][0] + " " + number[1][1] + " "
+ number[1][2]);
System.out.println(number[2][0] + " " + number[2][1] + " "
+ number[2][2]);
number0 = inverse(number);
if (number0 != null) {
System.out.println("Inverse Matrix is :");
System.out.println(number0[0][0] + " " + number0[0][1] + " "
+ number0[0][2]);
System.out.println(number0[1][0] + " " + number0[1][1] + " "
+ number0[1][2]);
System.out.println(number0[2][0] + " " + number0[2][1] + " "
+ number0[2][2]);
} else
System.out.println("矩阵的秩为零");
}
public static double[][] inverse(double[][] A) {
double z;
double A1, B, C, D, E, F, G, H, I;
// double [][] num = new double [3][3];
double[][] num0 = new double[3][3];
System.out.println("Inverse Matrix A is :");
System.out.println(A[0][0] + " " + A[0][1] + " " + A[0][2]);
System.out.println(A[1][0] + " " + A[1][1] + " " + A[1][2]);
System.out.println(A[2][0] + " " + A[2][1] + " " + A[2][2]);
z = A[0][0] * A[1][1] * A[2][2] + A[2][0] * A[0][1] * A[1][2] + A[0][2]
* A[1][0] * A[2][1] - A[0][2] * A[1][1] * A[2][0] - A[0][0]
* A[1][2] * A[2][1] - A[2][2] * A[1][0] * A[0][1];
if (z == 0)
return null;
else {
A1 = A[0][0];
B = A[0][1];
C = A[0][2];
D = A[1][0];
E = A[1][1];
F = A[1][2];
G = A[2][0];
H = A[2][1];
I = A[2][2];
num0[0][0] = 1 / z * (E * I - F * H);
num0[0][1] = 1 / z * (C * H - B * I);
num0[0][2] = 1 / z * (B * F - C * E);
num0[1][0] = 1 / z * (F * G - D * I);
num0[1][1] = 1 / z * (A1 * I - C * G);
num0[1][2] = 1 / z * (C * D - A1 * F);
num0[2][0] = 1 / z * (D * H - E * G);
num0[2][1] = 1 / z * (B * H - A1 * H);
num0[2][2] = 1 / z * (A1 * E - B * D);
return num0;
}
}
}
你写的程序,把那个int型的转化后你会发现还有别的错误!
建议你在做程序时,有解决补了的问题去查下JAVA帮助!
int转String的方法:String.valueOf(int a)
String转int
Integer.valueOf(String str)返回保存指定的 String 的值的 Integer 对象。将该参数解释为表示一个有符号的十进制整数, 就好像将该参数赋予 parseInt(java.lang.String) 方法一样。结果是一个表示字符串指定的整数值的 Integer 对象。
1楼所说的也时一种转换方法,JAVA帮助时编程时少不了的东西!
package com.wdy.test1;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class TestCase {
public static void main(String[] args) {
try {
new TestCase().testCase();
} catch (Exception e) {
e.printStackTrace();
}
}
public void testCase() throws Exception{
Scanner sc = new Scanner(System.in);
// 从字符扫描器中读取下一行字符串赋给变量s
// s的期望格式是用冒号隔开的24小时制的小时和分钟,比如23:12
String s = sc.nextLine();
sc.close();//关闭扫描器,释放资源
//sc指向一个新建的扫描器对象,并把字符串s当作扫描源
sc = new Scanner(s);
sc.useDelimiter(":");//将sc的分隔符设置成冒号
int h,m;
h=sc.nextInt();
m=sc.nextInt();
//创建一个当前日历对象,然后重新设置它的小时数和分钟数
Calendar c = Calendar.getInstance();
if(h24h=0){
c.set(Calendar.HOUR,h);
}else{
throw new Exception("小时数大小异常");
}
if(m59m=0){
c.set(Calendar.MINUTE, m);
}else{
throw new Exception("分钟数大小异常");
}
//将日历对象转换成日期对象然后格式化输出日期
Date d = c.getTime();
SimpleDateFormat format =new SimpleDateFormat("hh:mm");
System.out.println(format.format(d));
}
}