第7章 二維陣列程式設計2
阿新 • • 發佈:2018-12-20
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();
}
}
}