Java随堂题目 试一试

1、 如有唐诗
    锄禾日当午
    汗滴禾下土
    谁知盘中餐
    粒粒皆辛苦

  要求:将这首唐诗按照古文样式输出,输出格式如下:
    粒谁汗锄
    粒知滴禾
    皆盘禾日
    辛中下当
    苦餐土午

import java.util.*;
public class java02 {

    public static void main(String[] args) {
        
                //定义二维数组
        char[][] a = {{'锄','禾','日','当','午'},{'汗','滴','禾','下','土',},{'谁','知','盘','中','餐'},{'粒','粒','皆','辛','苦'}};
        
                //输出原唐诗
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<5;j++)
            {
                System.out.print(a[i][j]);
            }
            System.out.println();//换行
        }

        System.out.println();//换行

                //输出诗的古文样式
        for(int j=0;j<5;j++)
        {
            for(int i=3;i>=0;i--)
            {
                System.out.print(a[i][j]);
            }
            System.out.println();//换行
        }
        
    }

}                                                                                                                

运行结果:

2、要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示。如某位置为地雷,则该位置用数字1表示,
  如该位置不是地雷,则暂时用数字0表示。
  编写程序完成在该二维数组中随机布雷的操作,程序读入3个参数:布雷面板的行数(r),列数(c),布置的地雷个数(n),
  且要满足0<n<r*c*0.75(即布置地雷的最大密度为75%),程序运行后将n个地雷随机地布置在r*c的二维数组

 

为了方便检测,将三个数均设为随机数:

import java.util.*;
public class java01 {

    public static void main(String[] args) {
        
        Random rnd = new Random();
        
                //随机输出行r、列c、雷数n
        int r = (int)(rnd.nextDouble()*20)+1;
        int c = (int)(rnd.nextDouble()*20)+1;
        int n = (int)(rnd.nextDouble()*r*c*0.75);
        System.out.println(r+" "+c+" "+n);
        
                //定义二维数组
        int[][] a = new int[r][c];

        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                                //将0/1随机插入数组
                a[i][j]=(int)(rnd.nextDouble()*3-1);
                if(a[i][j]==1)
                    n--;
                if(n==0)
                    break;
                System.out.print(a[i][j]+" ");
            
            }            
            System.out.println();
        }
        System.out.println();
    }

}                                                                                                                                                                                                                                                                                                                                                        

*这种写法会出现以下几个问题:

  1、雷数出现0,但仍有雷

 

  2、雷数明显不够

  3、形状不规则

 

改写代码后:

import java.util.*;
public class java01 {

    public static void main(String[] args) {
        
        Random rnd = new Random();
        
        int r = (int)(rnd.nextDouble()*20)+1;
        int c = (int)(rnd.nextDouble()*20)+1;
        int n = (int)(rnd.nextDouble()*r*c*0.75);
        System.out.println(r+" "+c+" "+n);
        
        int[][] a = new int[r][c];

        
            for(int i=0;i<r;i++)
            {
            
                k:for(int j=0;j<c;j++)
                { 
                    if(n==0)
                    {
                            a[i][j]=0;
                            continue k;
                    }
                    
                    a[i][j]=(int)(rnd.nextDouble()*3-1);
                    if(a[i][j]==1)
                        n=n-1;
                
                    System.out.print(a[i][j]+" ");
                
                }            
                System.out.println();
            
    
        }
    }

}

*这种写法会出现一个问题:雷全部出现后,后面不会自动补0:

 

再次修改代码:

import java.util.*;
public class java01 {

    public static void main(String[] args) {
        
        Random rnd = new Random();
        
        int r = (int)(rnd.nextDouble()*20)+1;
        int c = (int)(rnd.nextDouble()*20)+1;
        int n = (int)(rnd.nextDouble()*r*c*0.75);
        System.out.println(r+" "+c+" "+n);
        
        int[][] a = new int[r][c];

        
            for(int i=0;i<r;i++)
            {
            
                k:for(int j=0;j<c;j++)
                { 
                    if(n==0)
                    {
                            a[i][j]=0;
                            System.out.print(a[i][j]+" "); //使a[i][j]=0可以输出
                            continue k;
                    }
                    
                    a[i][j]=(int)(rnd.nextDouble()*3-1);
                    if(a[i][j]==1)
                        n=n-1;
                
                    System.out.print(a[i][j]+" ");
                
                }            
                System.out.println();
            
    
        }
    }

}

 

posted @ 2018-04-09 23:48  Bamboo菌  阅读(93)  评论(0编辑  收藏  举报