(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner rand = new Scanner(System.in);
int shu = rand.nextInt();
System.out.println("你输入的是:"+shu);
}
}
Scanner 的头文件为import java.util.Scannner,之后再用Scanner声明,就可以调用了。 首先创建一个Scanner对象rand,构造函数的初始值为System.in,再利用rand.nextInt()来接收一个int型数据shu的值。 字符串类型遇到空格或者回车就结束输入,需要用到nextline()
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.最终代码:(int)(Math.random()*50) + 50
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");
}
}
}
结果为 不等于0.3 因为有误差 ,浮点数精度丢失,二进制的存储数据不能完整的表示0.1 最后结果比0.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<1e-6)
{
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
4.学习总结: Java和c语言结构类似 语句不同 写代码的时候要分清语句适用的环境。
输出有两种形式:一种是System.out.println();一种是System.out.printf();前者用与字符的输出 输出后换行,后者跟C语言的输出类似。
输入也不在用scanf ,通过Scanner类
(二)实验总结
实验内容:
1.看商品猜价格
思路:先给价格附用一个定值 在利用for循环重复输入价格进行判断,使用if判断,如果相等,使用break跳出循环,输出猜了多少次;如果不相等 输出猜大了猜小了;如果10次没有猜对,输出正确价格。 最后利用产生随机数传给价格。
实验问题分析:
问题:输出有问题
原因:当猜对后没有结束循环
修改:在猜对语句后加 break;
2.万年历
思路:根据之前写的c语句改成java用的语句,把c语言的函数写成方法,然后再调用方法。还要判断用户输入的年份是否是闰年,计算出距1990年有多少年判断每年的天数并通过用户输入的月份,把天数累加计算出距1990年1月1日有多少天,之后计算月初对应的星期,最后按格式输出。
实验问题分析:
问题:输出的格式不对应
原因:之前c用的空格,在Java里不适用
修改: 改成" "
3.评分系统
思路:利用二位数组存储随机数产生的评委打的分数, 利用循环找到最大值最小值,再把所有评分的和减去最大分最小分 ,求出平均值存到平均数的数组,调用排序函数 最后输出。
实验问题分析:
问题:最后输出的平均数为负值
原因:sum减去最大数和最小数的语句位置放错位置
修改:把减去最大数和最小数的语句放在循环外边
排序排反后 反向输出。 求平均数时sum/8 需要强制类型转换。因为平均数数组为float型
(三)代码托管