1. 程式人生 > >第7章 二維陣列程式設計2

第7章 二維陣列程式設計2

在這裡插入圖片描述

import java.util.Arrays;
import java.util.Scanner;

public class lian7_11 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.println("Enter the size for the matrix:");
		int line=scanner.nextInt();
		int[][] matrix=new int[line][line];
		fuzhi(matrix);
		print(line, matrix);
		Row(matrix);
		Col(matrix);
		Diagonal(matrix);
		subDiagonal(matrix);
	}

	private static void subDiagonal(int[][] matrix) {
		boolean flag=true;
		int m=matrix[0][matrix.length-1];
		for(int i=1;i<matrix.length;i++){
			if(m!=matrix[i][matrix.length-1-i]){
				flag=false;
				break;
			}
		}
		if(flag){
			System.out.println("All on subDiagonal");
		}
		
	}

	private static void Diagonal(int[][] matrix) {
		boolean flag=true;
		int m=matrix[0][0];
		for(int i=0;i<matrix.length;i++){
			if(m!=matrix[i][i]){
				flag=false;
				break;
			}
		}
		if(flag){
			System.out.printf("All on Diagonal\n");
		}
	}

	private static void Col(int[][] matrix) {
		for(int j=0;j<matrix[0].length;j++){
			int m=matrix[0][j];
			boolean flag = true;
			for(int i=1;i<matrix.length;i++){
				if(m!=matrix[i][j]){
					flag=false;
					break;
				}
			}
			if(flag){
				System.out.printf("All %d on col %d\n",m,j+1);
			}
		}
	}

	private static void Row(int[][] matrix) {
		for(int i=0;i<matrix.length;i++){
			int m=matrix[i][0];
			boolean flag = true;
			for(int j=1;j<matrix[i].length;j++){
				if(m!=matrix[i][j]){
					flag = false;
					break;
				}
			}
			if(flag){
				System.out.printf("All %d on row %d\n",m,i+1);
			}
		}
	}

	private static void print(int line, int[][] matrix) {
		for(int i=0;i<line;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
	}
	private static void fuzhi(int[][] matrix) {
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				matrix[i][j]=(int) (Math.random()*2);
			}
		}
	}
}

在這裡插入圖片描述

import java.util.Arrays;

public class lian7_12 {
	public static void main(String[] args) {
		int[][] matrix={
				{1,5},
				{2,4},
				{1,3},
				{5,1},
				{8,2},
				{4,8},
				{3,4},
				{7,4},
				{1,1}
		};
		SortByLine(matrix);
		System.out.println("=================================");
		SortALLElem(matrix);
	}

	private static void SortALLElem(int[][] matrix) {
		int[] n=new int[matrix.length*matrix[0].length];
		int index=0;
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				n[index++]=matrix[i][j];
			}
		}
		Arrays.sort(n);
		index=0;
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				matrix[i][j]=n[index++];
			}
		}
		for(int i=0;i<matrix.length;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
	}

	private static void SortByLine(int[][] matrix) {
		for(int i=0;i<matrix.length-1;i++){
			int mi=sort(matrix[i]);
			for(int j=i+1;j<matrix.length;j++){
				int mj=sort(matrix[j]);
				if(mi>mj){
					int[] temp=matrix[i];
					matrix[i]=matrix[j];
					matrix[j]=temp;
					mi=mj;
				}
			}
		}
		for(int i=0;i<matrix.length;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
		
	}

	private static int sort(int[] matrix) {
		String s="";
		for(int i=0;i<matrix.length;i++){
			s=s+matrix[i];
		}
		return Integer.parseInt(s);
	}
}

7.13 在這裡插入圖片描述

import java.util.Arrays;
import java.util.Scanner;

public class lian7_13 {
	private static final String matrix = null;
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter the row and col:");
		int row=scanner.nextInt();
		int col=scanner.nextInt();
		if(row<4&&col<4){
			System.out.println("行列數不能小於4:");
			return;
		}
		int[][] matrix=new int[row][col];
		
		for(int i=0;i<row;i++){
			for(int j=0;j<col;j++){
				matrix[i][j]=(int) (Math.random()*2);
			}
		}
		
		for(int i=0;i<row;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
		boolean flag=isConsecutiveFour(matrix);
		System.out.println(flag);
		
	}
	public static  boolean isConsecutiveFour(int[][] values){
		boolean flag=false;
		if(AllRow(values)||AllCol(values)||Diagonal(values)||subDiagonal(values)){
			flag=true;
		}
		return flag;
	}
	
	private static boolean subDiagonal(int[][] values) {
		boolean flag=false;
		for(int i=0;i<values.length;i++){
			for(int j=0;j<values[i].length;j++){
				int m=values[i][j];
				if(i>=3&&j<=values[0].length-4){
					if(m!=values[i-1][j+1]||m!=values[i-2][j+2]||m!=values[i-3][j+3]){
						break;
					}else{
						flag=true;
						break;
					}
				}
			}
		}
		if(flag){
			System.out.println("SubDiagonal");
		}
		return flag;
	}
	private static boolean Diagonal(int[][] values) {
		boolean flag=false;
		for(int i=0;i<values.length;i++){
			for(int j=0;j<values[i].length;j++){
				int m=values[i][j];
				if(i<=values.length-4&&j<=values[i].length-4){
					if(m!=values[i+1][j+1]||m!=values[i+2][j+2]||m!=values[i+3][j+3]){
						break;
					}else{
						flag=true;
						break;
					}
				}
			}
		}
		if(flag){
			System.out.println("Diagonal");
		}
		return flag;
	}
	private static boolean AllCol(int[][] values) {
		boolean flag=false;
			for(int j=0;j<values[0].length;j++){
				for(int i=0;i<values.length;i++){
				int m=values[i][j];
				if(i<=values.length-4){
					if(m!=values[i+1][j]||m!=values[i+2][j]||m!=values[i+3][j]){
						break;
					}else{
						flag=true;
						break;
					}
				}
			}
		}
		if(flag){
			System.out.println("col");
		}
		return flag;
	}
	private static boolean AllRow(int[][] values) {
		boolean flag=false;
		for(int i=0;i<values.length;i++){
			for(int j=0;j<values[i].length;j++){
				int m=values[i][j];
				if(j<=values[0].length-4){
					if(m!=values[i][j+1]||m!=values[i][j+2]||m!=values[i][j+3]){
						break;
					}else{
						flag=true;
						break;
					}
				}
			}
		}
		if(flag){
			System.out.println("row");
		}
		return flag;
	}
}

在這裡插入圖片描述

import java.util.Arrays;
import java.util.Scanner;

public class lian7_14 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		double[][] matrix=new double[3][3];
		System.out.println("Enter a 3-by-3 matrix row and col:");
		//賦值
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				matrix[i][j]=scanner.nextDouble();
			}
		}
		//列印
		for(int i=0;i<3;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
		if(isMarkovMatrix(matrix)){
			System.out.println("It is a Markov matrix!");
		}else{
			System.out.println("It is not a Markov matrix!");
		}
	}
	public static  boolean isMarkovMatrix(double[][] m){
		for(int j=0;j<m[0].length;j++){
			double sum=0;
			for(int i=0;i<m.length;i++){
				if(m[i][j]<0){
					return false;
				}
				sum+=m[i][j];
			}
			if(sum!=1){
				return false;
			}
		}
		return true;
	}
}

在這裡插入圖片描述

import java.util.Arrays;

public class lian7_15 {
	public static void main(String[] args) {
		double[][] a=new double[][]{
				{5,10},
				{0,20}
		};
		double[] b=new double[]{9,20};
		double[] result=lineaeEquation(a,b);
		if(result==null){
			System.out.println("無解!");
		}else{
			System.out.println(Arrays.toString(result));
		}
		
	}

	private static double[] lineaeEquation(double[][] a, double[] b) {
		double[] res=new double[2];
		double delt=a[0][0]*a[1][1]-a[0][1]*a[1][0];
		if(delt==0){
			return null;
		}
		res[0]=(b[0]*a[1][1]-b[1]*a[0][1])/delt;
		res[1]=(b[1]*a[0][0]-b[0]*a[1][0])/delt;
		return res;
	}
}

7.16 在這裡插入圖片描述

import java.util.Scanner;

public class lian7_16 {
	public static void main(String[] args) {
		double[][] points=new double[3][2];
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter x1,y1,x2,y2,x3,y3:");
		for(int i=0;i<points.length;i++){
			for(int j=0;j<points[i].length;j++){
				points[i][j]=scanner.nextDouble();
			}
		}
		double area=getTriangleArea(points);
		
		System.out.println("The area of the triangle is "+area);
		
	}

	private static double getTriangleArea(double[][] points) {
		double[] sides=new double[3];
		sides[0]=getDistance(points[0],points[1]);
		sides[1]=getDistance(points[0],points[2]);
		sides[2]=getDistance(points[1],points[2]);
		
		double s=(sides[0]+sides[1]+sides[2])/2;
		
		if(sides[0]+sides[1]>sides[2]&&sides[0]+sides[2]>sides[1]&&
										sides[1]+sides[2]>sides[0]){
			double area=Math.sqrt(s*(s-sides[0])*(s-sides[1])*(s-sides[2]));
			return area;
		}else{
			System.out.println("三點共線");
			return 0;
		}
	}

	private static double getDistance(double[] p1, double[] p2) {
		return Math.sqrt(Math.pow(p1[0]-p2[0], 2)+Math.pow(p1[1]-p2[1], 2));
	}
}

在這裡插入圖片描述

import java.util.Arrays;
import java.util.Scanner;

public class lian7_17 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		double[][] points=new double[4][2];
		System.out.println("Enter x1 y1 x2 y2 x3 y3 x4 y4:");
		for(int i=0;i<points.length;i++){
			for(int j=0;j<points[i].length;j++){
				points[i][j]=scanner.nextDouble();
			}
		}
		double[] p=getCenter(points);
		
		double[] area=new double[4];
		area[0]=getArea(points[0],points[1],p);
		area[1]=getArea(points[1],points[2],p);
		area[2]=getArea(points[2],points[3],p);
		area[3]=getArea(points[0],points[3],p);
		
		System.out.println(Arrays.toString(area));
	}

	private static double getArea(double[] p1, double[] p2, double[] p) {
		double[] sides=new double[3];
		sides[0]=getDistance(p1,p2);
		sides[1]=getDistance(p,p1);
		sides[2]=getDistance(p,p2);
		
		double s=(sides[0]+sides[1]+sides[2])/2;
		
		double area=Math.sqrt(s*(s-sides[0])*(s-sides[1])*(s-sides[2]));
		return area;
	}

	private static double getDistance(double[] p1, double[] p2) {
		return Math.sqrt(Math.pow(p1[0]-p2[0], 2)+Math.pow(p1[1]-p2[1], 2));
	}

	private static double[] getCenter(double[][] points) {
		/*(x1,y1)(x3,y3)構成一條直線
		 * (x2,y2)(x4,y4)構成一條直線
		 * 求兩條直線的交點	
		 * ax+by=e
		 * cx+dy=f
		 * x=(de-bf)/(ad-bc)
		 * y=(af-ec)/(ad-bc)
		 * a=y1-y3
		 * b=x1-x3
		 * c=y2-y4
		 * d=x2-x4
		 * e=(y1-y3)*x1-(x1-x3)*y1
		 * f=(y2-y4)*x2-(x2-x4)*y2
		 * 
*/		
		double[] p=new double[2];
		double a=points[0][1]-points[2][1];
		double b=points[0][0]-points[2][0];
		double c=points[1][1]-points[3][1];
		double d=points[1][0]-points[3][0];
		double e=a*points[0][0]-b*points[0][1];
		double f=c*points[1][0]-d*points[1][1];
		
		double delt=a*d-b*c;
		//x
		p[0]=(d*e-b*f)/delt;
		//y
		p[1]=(a*f-e*c)/delt;
		
		return p;
	}
}

在這裡插入圖片描述

import java.util.Arrays;
import java.util.Scanner;

public class lian7_18 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("Enter the number of rows int the line:");
		int line=scanner.nextInt();
		int[][] matrix=new int[line][line];
		
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				matrix[i][j]=(int) (Math.random()*2);
			}
		}
		for(int i=0;i<matrix.length;i++){
			System.out.println(Arrays.toString(matrix[i]));
		}
		
		int[] point=findLargestBlock(matrix);
		System.out.println(Arrays.toString(point));
	}

	private static int[] findLargestBlock(int[][] m) {
		int[] point=new int[2];
		int size=0;
		
		for(int i=0;i<m.length;i++){
			for(int j=0;j<m.length;j++){
				if(m[i][j]==1){
					int count=1;
					for(int k=j+1;k<m.length;k++){
						if(m[i][k]==m[i][j]){
							count++;
						}else{
							break;
						}
					}
					boolean flag=true;
					for(int k=1;k<count;k++){
						if(i+k>=m.length){
							flag=false;
							break;
						}
						if(m[i][j]!=m[i+k][j]){
							flag=false;
							break;
						}
					}
					if(flag){
						boolean isAllOne=true;
						for(int x=i;x<i+count;x++){
							for(int y=j;y<j+count;y++){
								if(m[x][y]!=1){
									isAllOne=false;
									break;
								}
							}
						}
						if(isAllOne&&count>size){
							point[0]=i;
							point[1]=j;
							size=count;
						}
					}
				}
			}
		}
		System.out.println(size);
		return point;
	}
}

7.19 在這裡插入圖片描述

public class lian7_19 {
	public static void main(String[] args) {
		String[] letters={"A","B","C","D","E","F","G"};
		for(int i=0;i<letters.length;i++){
			int count=i;
			for(int j=0;j<letters.length;j++){
				System.out.print(letters[count%7]+" ");
				count++;
			}
			System.out.println();
		}
	}
}