(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
java.util.Scanner类是一个用于扫描输入文本的应用程序,可以结合使用正则表达式和从输入流中检索特定类型数据项的方法,除了使用正则表达式,还可以对字符串和基本数据类型进行分析。最主要的功能就是获取控制台输入。
nextbyte():输入字节数
nextInt ():输入整数
nextFloat():输入浮点数
nextDouble():输入双精度浮点数
字符串的输入:
nextLine():可输入Enter前所有字符 △
next():不能输入带空格 的字符串 △
程序如下:
import java.util.Scanner;
public class Tese4 {
public static void main(String[] args){
int i=0; float f=0.0f;
Scanner scan=new Scanner(System.in); //从键盘接受数据
System.out.print("输入数据:");
String str=scan.nextLine();
System.out.println("输入的数据为:"+str); //字符串
System.out.print("输入整数:");
if(scan.hasNextInt()){ //判断输入的是否是整数
i=scan.nextInt();
System.out.println("整数数据:"+i);
}else{
System.out.println("输入的不是整数!");
}
System.out.print("输入小数:");
if(scan.hasNextFloat()){ ////判断输入的是否是小数
f=scan.nextFloat();
System.out.println("小数数据:"+f);
}else{
System.out.println("输入的不是小数!");
}
}
}
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Random类产生的随机数属于伪随机数,所进行的取值是在其取值范围内均匀分布的。只要种子数相同,每一次生成的随机数一定是相同的。
Math.random()生成的随机数是真正意义上的随机数,但该语法只能生成0到1之间的小数,在实际应用是要对其进行放大和转换。
程序如下:
import java.util.Random;
public class Tese4 {
public static void main(String args[]){
System.out.println( "input" );
Random r=new Random();
System.out.println(r.nextInt(100));
int x=(int)(Math.random()*100);
System.out.println(x);
}
}
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");
}
}
}
运行结果:不等于0.3
原因:浮点数类型存在极小误差
为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改:
import java.math.BigDecimal;
public class Tese4 {
public static void main(String[] args){
BigDecimal a=new BigDecimal(0.1+"");
BigDecimal b=new BigDecimal(0.1);
BigDecimal c=new BigDecimal(0.1+"");
System.out.println( b );
System.out.println( c );
if( a.add(b).add(c).doubleValue() == 0.3 ){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
运行结果:
0.1000000000000000055511151231257827021181583404541015625
0.1
等于0.3
4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
多次向他人请教问题,发现自己不能灵活学习新的知识,不能熟练掌握已学知识。今后要多提高自己动手操作能力,并与别人交流学习成果,取得进一步的提高。
(二)实验总结
实验内容:
1.看商品猜价格
程序设计思路:
首先得到随机价格,然后输入要竞猜的价格(最多可试10次),将两者进行比较,若相等,则输出猜对了和价格,否则输出猜大或猜小了,若10次都没猜对,提示失去机会。
问题:
没有对Scanner进行导入java.util包,总是提示错误
解决方案:
查书巩固知识
2.万年历
程序设计思路:
输入年份月份,判断是否闰年,计算该月总天数,计算距离1900年1月共有多少天,用计算得到的距离数取余7+1,即得到输入某年份的当月1号为星期几,输出该月万年历。
问题:
对每个方法的调用存在疑问,并且最后输出万年历的printCalender函数,输出格式总不正确
解决方案:
向他人求教,发现把totalDays % 7 + 1理解错了,此表达式计算出的是上个月月末的星期数!!
3.评分系统
程序设计思路:
随机产生小于10的随机数十个,因为有5个评委,固定义了一维数组长度为5,循环5次,分别计算总和,最大值,最小值,并查书用了"java.Arrays.sort(数组名称)"对数组进行排序输出,平均值为总值除8.
问题:因为基础比较差,不能清晰理解二维数组,所以此程序在一维数组的基础上加了循环,今后会重新学习二维数组,并在今后的程序中进行实际操作。
解决方案:扎实基础
码云提交历史截图: