《Java技术》第一次作业——Java语言基础
(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
首先创建一个Scanner对象s,构造函数的初始值为System.in,再利用s.nextInt()来接收一个int型数据的值
public class Input {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int x = s.nextlnt();
}
}
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对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
如 Random rand = new Random();
a = rand.nextInt(100)+1;生成1-100的随机数
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,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。
修改后
package ex01;
import java.math.*;
public class Test {
public static void main(String args[]) {
double a = 0.1;
double b = 0.1;
double c = 0.1;
if(Math.abs(a+b+c-0.3)<1e-6){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
(二)实验总结
实验内容:
1.看商品猜价格
程序设计思路:玩家有5次机会猜商品价格,总分100,每猜错一次减20分,机会用完,输出本轮成绩,询问玩家是否进行下一轮,不进行下一轮则输出共玩了几次游戏和总得分,定义sum记录玩家每轮的得分和,while(flag=1),flag=1,进行下一轮游戏,flag=0,退出游戏
问题1:刚开始用的for循环,但跳出程序较麻烦
解决方案:改用死循环
2.万年历
程序设计思路:创建①判断闰年的方法、②判断某年某月有多少天的方法、③计算某年某月之前距离1900年1月1日的总天数的方法,在②中调用①判断2月多少天,在③中调用①②求出总天数,调用③根据1+totalDays(year,month)算出某年某月1号是星期几,最后按照一定的格式输出。
问题1:求某年前几个月的天数
for(n=0;n<month;n++){
sum+=days(year,n);
}
解决方案:n的初值应为1。
3.评分系统
程序设计思路:i表示选手号,j表示评委号,将选手的得分存在二维数组里a[i][j]中,将a[i][*]中的最值改为-1,求平均数时遇到-1自动跳过。
问题1:最后排序输出选手得分情况时未知选手号
解决方案:新建一维数组跟踪选手号码
(三)代码托管