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