题目:求矩阵各列数字的和
代码实现:
import java.util.*;
class Class35{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("Enter a 3-by-4 matrix row by row:");
double[][] matrix=new double[3][4]; //创建二维数组
for(int i=0;i<matrix.length;i++){ //给数组赋值
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=scanner.nextDouble();
}
}
System.out.println(sumColumn(matrix,2)); //调用方法输出
}
//函数用于求对于列的和
public static double sumColumn(double[][] arr,int columnIndex){
double sum=0; //存放列的和
for(int i=0;i<arr.length;i++){
sum+=arr[i][columnIndex]; //对于列角标的数累加给sum
}
return sum; //返回sum
}
}
题目:探索矩阵
代码实现:
import java.util.*;
class Class36{
/*
1、提示用户输入方阵的尺寸
2、根据尺寸创建二维数组
3、遍历二维数组,给每个元素随机赋值0或1
4、逐行判断是否全部相等
5、逐列判断是否全部相等
6、判断主对角线是否全=
7、判断副对角线是否全=
*/
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("Enter the size for the matrix:");
int size=scanner.nextInt();
int[][] matrix=new int[size][size]; //创建一个二维数组
//创建random对象随机赋值
Random random=new Random();
//二维数组赋值
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=random.nextInt(2); //随机选取0和1赋值给二维数组
}
}
//打印二维数组
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
//判断行
for(int i=0;i<matrix.length;i++){
boolean flag=true;
for(int j=1;j<matrix[i].length;j++){
if(matrix[i][0]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[i][0]+" on row "+i);
}
}
//判断列
for(int j=0;j<matrix.length;j++){
boolean flag=true;
for(int i=1;i<matrix.length;i++){
if(matrix[0][j]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[0][j]+"s on col "+j);
}
}
//判断主对角线
boolean flag=true;
for(int x=0;x<matrix.length;x++){
if(matrix[0][0]!=matrix[x][x]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[0][0]+"s on the major diagonal");
}else{
System.out.println("No same numbers on the major diagonal");
}
//判断副对角线
flag=true;
for(int i=matrix.length-2,j=1;i>=0&&j<matrix.length;i--,j++){
if(matrix[matrix.length-1][0]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[matrix.length-1][0]+"s on the sub-diagonal");
}else{
System.out.println("No same numbers on the sub-diagonal");
}
}
}
题目:两个矩阵相乘
代码实现:
class Home33{
public static void main(String[] args){
//矩阵相乘:[m*p] * [p*n] = [m*n]
double[][] A={
{5,2,4},
{3,8,2},
{6,0,4},
{0,1,6}
};
double[][] B={
{2,4},
{1,3},
{3,2}
};
double[][] C=new double[A.length][B[0].length]; //相乘后矩阵长度
for(int i=0;i<C.length;i++){ //遍历
for(int j=0;j<C[i].length;j++){
C[i][j]=getSum(A,B,i,j); //调用方法求
System.out.print(C[i][j]+" "); //输出矩阵
}
System.out.println(); //换行
}
}
//方法getSum
public static double getSum(double[][] A,double[][] B,int i,int j){
double sum=0;
for(int k=0;k<B.length;k++){
sum+=A[i][k]*B[k][j];
}
return sum;
}
}
题目:最大的行和列
代码实现:
class Home34{
public static void main(String[] args){
//创建一个二维矩阵
int[][] matrix=new int[4][4];
//赋值打印
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=Math.random()<0.5?0:1;
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
//找第一个具有最多1的行和列
int maxR=0; //保存的是行中1的最大个数
int maxC=0; //保存的是列中1的最大个数
int row=0; //行
int col=0; //列
for(int i=0;i<matrix.length;i++){
int countR=0;
int countC=0;
for(int j=0;j<matrix[i].length;j++){
if(matrix[i][j]==1){
countR++;
}
if(matrix[j][i]==1){
countC++;
}
}
if(countR>maxR){ //比较行
maxR=countR;
row=i;
}
if(countC>maxC){ //比较列
maxC=countC;
col=i;
}
}
System.out.println("The largest row index: "+row);
System.out.println("The largest col index: "+col);
}
}