二维数组

二维数组定义:

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;
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值