Java作业(1)
(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
Scanner.的用法主要有以下的几种方法
1.Scanner.nextLine(); //读取下一行(包括空格,tab等)
2.Scanner.next()😕/String
3.Scanner.nextInt()😕/int
4.Scanner.nextFloat()//float
5.Scanner.nextBoolean()//boolean
6.Scanner.nextDouble()//double
7.Scanner.nextByte()//byte
8.Scanner.nextShort()//short
9.Scanner.char b =s.next().charAt(0);//char
以代码的方式位
...
package shuru;
import java.util.Scanner;
public class shuru {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
String a =input.nextLine();//读取下一行(包括空格,tab等)
System.out.println(a) ;
String b =input.next();//String
System.out.println(b) ;
int c =input.nextInt();//int
System.out.println(c) ;
float d=input.nextFloat();//float
System.out.println(d) ;
boolean e=input.nextBoolean();//boolean
System.out.println(e) ;
double f=input.nextDouble();//double
System.out.println(f) ;
byte g=input.nextByte();//byte
System.out.println(g) ;
short h=input.nextShort();//short
System.out.println(h) ;
char i =input.next().charAt(0);//char
System.out.println(i) ;
}
}
...
运行结果
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对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
以下程序都是产生0-50的随机数
...
package suijishu;
import java.util.Random;
public class suijishu {
public static void main(String[] args) {
Random rand=new Random() ;
int x=rand.nextInt(100)+1 ;
double y=Math.random()*50;
int z=(int)(Math.random()*50);
System.out.println(x) ;
System.out.println(y) ;
System.out.println(z) ;
}
}
...
运行结果 x 是0-49的整数,y是0-50的双精度小数,z是0-50的整数。
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,对上述程序进行修改。
答:程序运行结果是:不等于0.3
原因:在Java使用分数和指数来表示浮点类型的数据时,在加减的过程中,产生了浮点型误差,不能使用“==”来比较浮点类型数据的运算结果。
...
package test;
import java.math.BigDecimal;
public class test {
public static void main(String args[]) {
BigDecimal a = new BigDecimal(0.1);
BigDecimal b = new BigDecimal(0.1);
BigDecimal c = new BigDecimal(0.1);
BigDecimal d = new BigDecimal(1);
System.out.println(a.add(b).add(c));
if(a.add(b).add(c).divide(d,2,BigDecimal.ROUND_HALF_UP).doubleValue()==0.3){
System.out.println("等于0.3");
}else {
System.out.println("不等于0.3");
}
}
}
...
4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
1.数组中的定义的double类型的运算,时常忘记类型的转换
2.运用方法时,变量的声明混乱,为了方便把上面的方法复制下来,把里面上次的变量也带了下来,而第二次的带入的方法不跟第一次一样,在最后检查错误的时候,反而浪费时间。
3.数组的长度用 数组名.length ,二维数组的一维空间长度 数组名[ 行数].length。
4.“”只能进行数的比较,字符串的比较不能用,要用equal方法。若用”“比较,比较的是地址。
(二)实验总结
- 题目要求:
程序设计思路:
1.首先声明import java.util.Scanner,import java.util.Random.以便于键盘的输入和随机数的产生。
2.先建立String字符串str1=“yes”,以便于用户选择是否继续进行的标准。
3.设计Price方法,用Random来建立随机价格。
4.运用while循环,次数从5开始递减,Scanner来读写用户所输入的价格
(1)如果猜的价格比真正的价格高,提示价格高,那么进行下一次输入。再进行i--;
(2)如果猜的价格比真正的价格低,提示价格低,那么进行下一次输入。再进行i--;
(3)如果猜的价格和真正的价格一样,结束循环。
(4)若i=0结束竞猜,退出循环。
5.对i的值进行比较,分别给出100,80,60,40,20,0分的判定。
6.提示是否进行游戏,输入的字符串与str1比较,其中引用equal方法比较。
(1)若相等,则继续重新从2.项开始循环。
(2)若不想等,则退出。
7.输出总得分和总次数。 - 题目要求:
程序设计思路:
1.设计布尔型方法isLeap来判断年份是闰年还是平年。
2.设计整型方法days来判断月份的天数,其中2月的天数是29还是而是28,引用1的isLeap方法。
3.设计整形方法totalDays来计算从1900年到所输入年份月份的一号之前有多少天。其中天数的运算引用了days方法判断月份之前的天数,以及引用isLeap方法来计算1900年到输入年份之前的天数。
4.在3中计算的总天数结余7再加1,来判断所输入年份月份的第一天是星期几,利用制表符和for循环来输出日历,其中月份的天数再次引用days方法。 - 题目要求:
程序设计思路:
1.设计了两种评分的方法。一种是随机数输入,一种是手动输入。
(1)随机数输入是声明Random,产生随机数填入score数组。
(2)手动输入是靠Scanner进行键盘的输入。
2.把数组的每行都进行选择排序,把最高分放到数组的最后位置。
3.把数组的每行都进行选择排序,把最低分放到数组的倒数第二位置。
4.把数组的每行的前八个分数进行平均分运算,再放到score1数组中。
5.把score数组的分数进行冒泡排序,输出分数排行榜。
托管: