二维数组定义:
int[][] a=new int[row][col]
int[][] a=new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
};
二维数组本质上还是一个一维数组,只不过其数组元素是另一个一维数组。
int[][] a=new int[][]{ //锯齿矩阵
{1,2,3},
{4,5},
{6}
};
//遍历方式
for(int i=0;i<a.length;i++){
for(int j=0;j<a[i].length;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
A(求矩阵某列数字和)读取一个3*4的矩阵,求其某列元素和。
jin小编分析如下:求某列和时则为行动列不动
import java.util.Scanner;
class A{
public static void main(String[] args){
double[][] matrix=new double[3][4]; //创建一个3行4列的二维数组
//提示用户输入数据
Scanner sc=new Scanner(System.in);
System.out.println("Enter a 3-by-4 matrix row by row");
for(int i=0;i<matrix.length;i++){ //遍历这个数组
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=sc.nextDouble();
}
}
System.out.println(sumColumn(matrix,2)); //输出这个矩阵第三列的总和
}
public static double sumColumn(double[][] m,int columnIndex){ //sumColumn方法,参数为这个矩阵和想要求和的这个矩阵的某列的角标
double sum=0;
for(int i=0;i<m.length;i++){
sum+=m[i][columnIndex]; //将每行所对应的某列进行相加
}
return sum;
}
}
B(探索矩阵)提示用户输入一个方阵的长度,随机填入0和1,打印矩阵,找出整行整列都是0或1的行,列和对角线。
jin小编分析如下:
import java.util.Scanner;
class B{
/*提示用户输入相应的尺寸
2.创建相应的矩阵
3.遍历二维数组,随机赋值0,1
4.逐行判断是否全部相等
5.逐列判断是否全部相等
6.主对角线是否全部相等
7.副对角线是否全部相等
*/
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.print("Enter the size of the matrix:"); //提示用户输入方阵大小
int size=sc.nextInt();
int[][] matrix=new int[size][size];
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[i].length;j++){
matrix[i][j]=Math.random()>0.5?1:0; //三目运算符判断若随机生成数大于0.5则赋值1,否则为0
System.out.print(matrix[i][j]);
}
System.out.println();
}
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; //若不相等,跳出内循环
}
}
//for循环退出可能:a.跳出来 b.走完
if(flag){ //判断flag
System.out.println("All "+matrix[i][0]+" on row "+i+1);
}
}
//逐列判断,行动列不动
for(int j=0;j<matrix.length;j++){
boolean flag=true; //设标志
for(int i=0;i<matrix[i].length;i++){
if(matrix[0][j]!=matrix[i][j]){
flag=false;
break;
}
}
if(flag){
System.out.println("All "+matrix[0][j]+" on column"+j+1);
}
}
//主对角线判断
boolean flag=true;
for(int x=1;x<matrix.length;x++){
if(matrix[0][0]!=matrix[x][x]){
flag=false;
break;
}
if(flag){
System.out.println("All "+matrix[0][0]+" on the major diagonal");
}
}
//副对角线判断
flag=false;
for(int i=1,int j=matrix.length-2;i<matrix.length&&j>=0;i++,j--){
if(matrix[0][matrix.length-1]!=matrix[i][j]){
flag=false;
break;
}
if(flag){
System.out.println("All "+matrix[0][matrix[0].length-1]+" on the sub-diagonal");
}
}
}
}
C(猜字游戏)随机产生单词,用户一次猜测一个字母,每个字母显示为一个星号,猜测正确后,正确的字母显示出来。猜完一个单词后,显示猜错的次数且询问用户是否对另外一个单词进行猜测。
jin小编分析如下:
import java.util.*;
class ClassC{
//1.生成一组单词
public static String[] words={"computer","since","banana","mind","Hello"};
//2.随机抽取一个单词
public static String word=null;
//3.创建该单词的一个状态数组
public static boolean[] state=null;
//4.当前轮猜错的次数
public static int missed=0;
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
Random random=new Random();
word=words[random.nextInt(words.length)]; //words长度中随机抽取一个数,抽取的数为words的角标,然后就为Word
state=new boolean[word.length()]; //word的长度为状态数组的长度
//5.开始输入字符猜单词
while(true){
String password=getPassWord(); //全为星号
System.out.print("Enter a letter in word "+password+":");
String letter=scanner.nextLine();
changeWordState(letter); //根据输入的字母改变单词的状态
if(isEnd()){ //判断结束
System.out.println("The word is "+word+".You missed "+missed+" time"); //输出单词,显示错误次数
System.out.print("Do you want to guess another word?Enter y or n:"); //输出是否想要进行下一轮
if(scanner.nextLine().equals("y")){ //若用户想要进行下一轮
word=words[random.nextInt(words.length)]; //重新生成单词
state=new boolean[word.length()]; //重新生成状态数组
missed=0; //错误数置0
}else{
break; //若不想进行下一轮,则跳出
}
}
}
}
public static boolean isEnd(){ //判断结束
for(int i=0;i<state.length;i++){ //遍历单词,看是否单词状态有false,若有false,则没有结束
if(state[i]==false){
return false;
}
}
return true;
}
public static void changeWordState(String letter){ //改变单词状态
boolean isExist=false;
for(int i=0;i<word.length();i++){
if((word.charAt(i)+"").equals(letter)){ //若输入的字母单词中有,则改变存在为true
isExist=true;
if(state[i]==false){
state[i]=true; //改变状态为true
}else{
System.out.println("\t"+letter+" is already in the word");
return;
}
}
}
if(!isExist){ //若不存在,则错误数加一
missed++;
System.out.println("\t"+letter+" is not in the word");
}
}
public static String getPassWord(){ //先生成全为星号
String password="";
for(int i=0;i<word.length();i++){
if(state[i]==true){
password+=word.charAt(i);
}else{
password+="*";
}
}
return password;
}
…