博客
关于我
java笔记1.20
阅读量:631 次
发布时间:2019-03-13

本文共 3443 字,大约阅读时间需要 11 分钟。

1.20java笔记

依旧是两个程序:
搞了快半天才结束。不容易。

双色球

简述:

 7个球(6个红球和1个蓝球,红球的数字范围在1-33,蓝球的数字范围在1-16)上的数字组成的号码(随机生成),与用户输入的值进行对比,不需要顺序一致,值对就可以。
 一开始想的用switch去实现中奖的情况,但发现case里面还得再嵌套switch,想想就头大,不喜欢这样嵌套,之后改起来逻辑也不方便,干嘛自己找苦吃。还是乖乖选择了if-elseif-elseif-…-else分支,不动脑的福音。

该部分重点知识:

  • 1.一行接受接受多个数字(因为想一次性收到用户的输入值,循环不合适)
     原来 nextInt()方法可以接受多个值,在一行内,多个用空格隔开,但是逗号隔开不行,我试了。应该还有可以通过逗号来分割的方式。先规定好分隔符,然后一次性存入String数组,然后转换成对象所需的数据类型即可。需要用到String对象spilt(String regex)方法
  • 2.随机数范围的指定
     参数:(最大值-最小值+1)+最小值

还是直接来代码直接:

 因为nextInt(int bound)方法(bound需大于0,不然抛出非法参数异常)返回的是[0,bound)的随机数,注意区间,左闭右开。

理解:

范围内随机数公式:(最大值-最小值+1)+最小值

  实际是括号里就是区间长度,之所以加一是因为被减数本身没有算做一个,而在这里需要纳入计算;之所以最后加最小值,是为了设定最低值,因为如果产生0,加上最小值就是最小值。

例如:
随机生成两位数:nextInt(90)+10   范围:10~99  即99-10+1=90
随机生成[1,100]: nextInt(100)+1
随机生成三位数:nextInt(900)+100  范围:100~999
代码如下:

Random random = new Random();int randNumber =random .nextInt(MAX - MIN + 1) + MIN; // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

除了粗体解释部分自己理解外,该部分知识点来源于以下:

关于分隔用户输入的笔记

一行接受多个字符:

以逗号作为分隔的思路:

/**		 * 测试分隔		 */		System.out.println("请输入信息,逗号分隔:");		String input = sc.nextLine();		String[] arr = input.split(",");		for (int i = 0; i < arr.length; i++) {   			System.out.println(arr[i]);		}

正常的空格(一行内,回车视为结束)接受:

/**	 * 获取用户的红色球号	 * 	 * @return	 */	private static int[] getUserRedNum() {   		System.out.println("请输入6个红色球号[1-33],空格隔开");		int[] red = new int[6];		for (int i = 0; i < red.length; i++) {   			red[i] = sc.nextInt();		}		return red;	}

五子棋

这个绝对酸爽,上午10点,除去吃饭和休息时间,一直到晚上10点,不过写完还是蛮有成就感的。虽然他简单。

情况复杂

放置一张我的逻辑图:

五子棋思路

数组下标超出范围

思路:一开始是计算最大最小小标,如果不合法就直接不赋值判断,返回false,后来情况多了,我直接丢在异常里。捕获异常直接设置该方式查找结果为false。

贴上一部分判断:

/**	 * 判断斜边是否出界	 * 	 * @param abscissa	 * @param ordinate	 * @return	 */	private static boolean outOfRangeAtSlope(int abscissa, int ordinate) {   		if ((abscissa + 2 + 1 > chessboard.length || abscissa - 2 < 0)				|| (ordinate + 2 + 1 > chessboard.length || ordinate - 2 < 0)) {   			return true;		}		return false;	}

上述方式太麻烦了,后面统一换成这样(部分,其他思路一致):

// 3.右上零左下四4.右上三左下一5.右上四左下零		int value3 = chessboard[abscissa][ordinate];		try {   			a[0] = chessboard[abscissa + 1][ordinate - 1];			a[1] = chessboard[abscissa + 2][ordinate - 2];			a[2] = chessboard[abscissa + 3][ordinate - 3];			a[3] = chessboard[abscissa + 4][ordinate - 4];			for (int i = 0; i < a.length; i++) {   				if (value3 != a[i]) {   					m = false;					break;				}			}		} catch (Exception e1) {   			m = false;		}

关键我觉得这个肯定可以抽象出一个方法,不用这么麻烦,后面调用就可以了。时间太晚了,就没做了,总体功能上没有问题。优化下次吧。

问题

已解决的问题

1.整型数组初始化全为0,不需要自己赋值0;

2.落子判断:
 1).是否超越棋盘(数组的数字由用户做的才有这个问题),超过下标又是超出数组异常,存不进去;
 2).落子点是否有子。刚开始逻辑写反了,一直不让落子,论规范命名的重要性!
3.异常。当捕获到异常后,不会执行try语句块里抛出异常后面语句,如果catch语句中没有异常抛出,则执行catch语句中内容,最后会执行try-catch语句块外的部分;如果是用

throw new Exception("我是异常提示!");System.out.println("出现异常啦!");//该语句不会执行,编译错误

则不会执行抛出异常后面语句

4.求二维数组的长度
遍历二维数组的长度,我居然只用了一个for循环,唔,这么说也没错,不过我想求的是总行数*总列数的个数,也就是一共多少个元素。
代码:

//给定一个数组int[][] arr = new int[4][5];//计算行的长度:4int length1 = arr.length;//计算列的长度:5int length2 = arr[0].length;//已上复制下面参考文档,方便之后自己看/***自己写的部分代码:*循环遍历二维数组*/		for (int i = 0; i < chessboard.length; i++) {   // 循环二维数组			for (int j = 0; j < chessboard[i].length; j++) {   				System.out.print("\t" + chessboard[i][j]);			}			System.out.println();		}

未解决的问题

共4个:

1.
棋盘显示问题,不过还没有时间思考。
我想让他共用一个起始0,就是行号和列号的0共用一个,并且都以A作为起始点。
如图:
希望共用0
2.对于用户的输入的键盘坐标不是横纵分开接受,考虑一起接受,提升友好性;

3.那个五子棋能不能看看更改颜色或者划线做提示之类的;

4.eclipse字体也没试,乘法表那个。


就到这了,晚安。

                                                 sue
                                                 2021年1月20日02:21:11

转载地址:http://otyaz.baihongyu.com/

你可能感兴趣的文章
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memset初始化高维数组为-1/0
查看>>
Metasploit CGI网关接口渗透测试实战
查看>>
Metasploit Web服务器渗透测试实战
查看>>
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>