Scanner是默認按照行來讀取數字的。
創建一個用來輸入的函數
Scanner scan=new Scanner(System.in);system.in是表示從控制台輸入。
然后用一個變量類接收這個值
int n=scan.nextInt();
只要聲明一個對象即可,后面直接利用scan的方法轉換成各種類型即可。
Random方法是隨機生成數的方法。
種子是表示在這個數的范圍內生成的隨機數字。
即上面這個表示在10的范圍內生成的隨機數字。
下面是利用蒙特卡羅算法來判斷矩陣AB=E,即矩陣互逆。
package suanfa;
import java.util.Random;
import java.util.Scanner;
public class MtklSuanfa {
public static void main(String[] args) {
System.out.println("請輸入矩陣的維數n:");
Scanner scan=new Scanner(System.in);;
int n=scan.nextInt();
double a[][]=new double[n][n];
double b[][]=new double[n][n];
System.out.println("請輸入矩陣a");
for ( int i = 0; i <n; i++) {
for ( int j = 0; j <n; j++) {
//scan=new Scanner(System.in);
a[i][j]=scan.nextDouble();
}
}
System.out.println("輸出的矩陣a是:");
for ( int i = 0; i <n; i++) {
for ( int j = 0; j <n; j++) {
System.out.print(a[i][j]+"\t");
if (j+1==n) {
System.out.println("");
}
}
}
System.out.println("請輸入矩陣b");
for (int i = 0; i <n; i++) {
for (int j = 0; j <n; j++) {
//scan=new Scanner(System.in);
b[i][j]=scan.nextDouble();
}
}
System.out.println("輸出的矩陣b是:");
for ( int i = 0; i <n; i++) {
for ( int j = 0; j <n; j++) {
System.out.print(b[i][j]+"\t");
if (j+1==n) {
System.out.println("");
}
}
}
int result=mtkl(a,b,n);
if (result==0) {
System.out.println("a和b不是互逆矩陣");
}
else{
System.out.println("a和b是互逆矩陣");
}
}
private static int mtkl(double[][] a, double[][] b, int n) {
int flag = 0;
Random random=new Random();
double [] x=new double[n];
double [] y=new double[n];
double []z=new double[n];
for (int i = 0; i < n; i++) {
x[i]=random.nextInt(10);
}
//計算y=bx
compute(b,x,y,n);
//計算z=ay=abx
compute(a,x,z,n);
for (int i = 0; i < n; i++) {
if(Math.abs( z[i]-x[i] )==0 ){
flag=1;
}
flag=0;
}
return flag;
}
private static void compute(double[][] a, double[] x, double[] y, int n) {
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
y[i] += a[i][j] * x[j];
}
}
}