java中Scanner和random的用法
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];
}
}
}