(一)、学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
Scanner的使用:先声明import java.util.Scanner,用Scanner input =new Scanner(System,in);int a=input nextInt();读入一个数。对输入类型没有要求。关于nextInt()、next()和nextLine():nextInt()只读取数值,剩下”\n”还没有读取,并将光标放在本行中。next()只读空格之前的数据,并且光标指向本行,遇见第一个有效字符(非空格,非换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,即获得第一个扫描到的不含空格、换行符的单个字符串。使用nextLine()时,则可以扫描到一行内容并作为一个字符串而被获取到。
运行结果:
如果把程序修改:
s1=input.next();
s2=input.nextLine();
结果:
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法给s2从键盘输入值。
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Random类的随机方法是设定随机种子的,(如:new Random().nextInt(10)),这里的10就是随机种子,根据随机数的原理,相同随机种子在相同的随机次数中产生的随机数是一样的,如果看Math的random方法的实现代码的话,就会发现,该方法就是调用的Random类的nextDouble()方法。math的random只能获得一个随机数,而Random类里边还提供了很多对随机数处理的方法。
结果:
3.运行下列程序,结果是什么?查阅资料,分析为什么。
public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if((a + b + c) == 0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。
结果:
改进
结果是正确的,但是书上的还是没看懂。
4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
c和java有点混,多写程序比只看书效率要高,对知识理解也更深入,主要还是多实践。
(二)、实验总结
1、看商品猜价格
程序设计思路:先产生一个随机数,并输出(为了检验程序),然后用for循环十次比较输入的价格,在循环内用if判断猜大、猜小以及猜对的情况,并做出相应输出。
问题:只要没猜够十次,不论猜对与否,都可以一直猜。
原因:猜对后,没有跳出循环。
解决方案:在循环中猜对了后面使用return跳出循环。
2、万年历
程序设计思路:编写四个方法:1判断闰年,2求每个月天数(需调用第一个方法),3求距离1900.1.1的总天数(调用1,2方法);4输出当月日历(需调用第2、3方法)。用主方法调用四个方法并输出。
问题1:日历对不齐。
原因:使用英文表示星期,每个单词所占字符有长有短导致。
解决方案:用空格填补,使长度相同。
问题2:求距离1900.1.1的天数不对
原因:参数调用有问题
解决方案:改参数为表示月份的变量。
3、评分系统
程序设计思路:编写一个5行10列的矩阵,用于保存输入的是个评委对五个选手的评分,编写三个方法:求矩阵每行数的最大值,最小值,去掉最大值和最小值后的平均值。在主方法中分别对五个选手调用方法求出分数,用arrays进行排序。
问题1:输出有误差
原因:多次尝试,无法找出原因
解决方案:……~~~~
码云提交记录截图: