《Java技术》第一次作业
《Java技术》第一次作业
(一)学习总结
1.Scanner类
-
Scanner类放在
java.util
包中,此类是根据接收InputStream
类型的构造方法,扫描输入文本的新的实用程序,可以针对任何要处理的文本内容编写自定义的语法分析器。 -
例如读取一个整型数据:
Scanner Scan = new Scanner(System.in);
int Number = Scan.nextInt();
- 还可以读取以下几种输入数据的类型:
double nextDouble() 输入的信息为double类型。
float nextFloat() 输入的信息为float类型。
int nextInt() 输入的信息为int类型。
String nextLine() 输入的信息为读取行。
String next() 输入的信息为字符串。
long nextLong() 输入的信息为long类型。
- 实例:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入整数: ");
int Number=input.nextInt(); //此时输入一个整型数据方便读取
System.out.println(Number);
}
}
2.Random类与Math类中的Random()方法
java.util
包中的Random类是一个随机数产生类,是产生伪随机数的,也是有规则的随机。java.lang
包中的Math类的Random()方法,这种方法产生的随机数是从0.0到1.0的double类型。- Random类可以产生以下几种类型数据:
nextfloat() 返回0.0-1.0之间的数值
nextInt() 返回int数据范围的值
nextInt(1000) 返回1000以内的整型的值,此数值可任意设置
- 实例:
import java.util.Random;
public class RandomDemo{
public static void main(String[] args){
Random Rand = new Random();
int NumOne = Rand.nextInt(1000);
System.out.println("Rand产生的值:" + NumOne);
System.out.println("Math.random产生的值:" + (Math.random()));
}
}
- 结果为:
Rand产生的值:818
Math.random产生的值:0.8979449680225294
相比这两种方法,人们更倾向于Random类的使用,它比Math类中的Random()方法更方便。
3. 自我总结
- 首先,对于Java开发环境的搭建,classpath和path的作用及设置,对JDK,JVM,JRE的理解,以及配置过程中遇到的问题及方法我在自己的上一篇作业中详细的交代了。
- 其次,Java与C语言的数据类型并不完全相同,Java中的
boolean
型,有两种逻辑值,分别为true和false,而不能用1,0代替,boolean默认值为false。 - 最后,对于Java的学习,除了按照老师的要求去做,自己还要有所准备,自己要自学,遇到的代码,自己要练习,只有自己亲自练习的次数多,熟练掌握了方法与思路,就不会每次要独自完成一个项目时,感到无助,更不要一味的靠别人来完成自己的事情,只有自己学到了实际的东西,这样才不辜负你所付出的时间。
(二)实验总结
1. 猜数游戏
-
程序设计思路:
需要构建三个方法,选择商品数量的方法selectMerch(),猜测价格的方法guePri(),选择是否结束游戏的方法pause(),按照逻辑顺序调用使用。 -
实验问题分析:
- 问题1:
调用的次数与输出的提示不符合逻辑- 原因:
自己思考程序时,不能细心思考- 解决方案:
按照自己写的程序,一步一步运行后,就知道每条语句的正确顺序了- 问题2:
结束游戏方法,不能够按回车键继续- 原因:
使用错方法- 解决方案:
应该使用Scanner类中的nextLine()读取行的方法,注意equals方法的使用
Scanner Scan = new Scanner(System.in);
System.out.println("请输入是否退出(退出则为退出,按回车继续): ");
String str1 = Scan.nextLine();
String str2 = "退出";
if (str1.equals(str2)) {
System.out.println("分数是 : " + score);
System.exit(0);
}
2. 万年历
- 程序设计思路:
按照扩展要求的几个方法名称完成基本的框架构造,然后按照逻辑调用
private static boolean isLeap(int year)
private static int days(int year, int month)
private static int totalDays(int year, int month)
private static void printCalender(int year, int month)
- 实验问题分析:
- 问题1:
计算当前年月距离1900年1月1日的天数时,出现天数比实际天数多和比实际天数少的情况- 原因:
比实际天数少是因为在写计算年总天数时,需要判断平年闰年,条件应为判断每年是否为平年闰年,而不是你输入的年份;比实际天数多的是因为年月天数计算时应该分开来计算,而不是在计算年份是嵌套月份计算,否则就会计算每一年时,都会多计算你输入的月份天数。- 解决方案:
//计算年份
for (int i = 1900; i < year; i++) {
if (isLeap(i)) {
yearTotalDays += 366;
} else {
yearTotalDays += 365;
}
}
//计算月份
for (int j = 1; j < month; j++) {
if (j == 1 || j == 3 || j == 5 || j == 7 || j == 8 || j == 10|| j == 12) {
yearTotalDays += 31;
} else if (j == 4 || j == 6 || j == 9 || j == 11) {
yearTotalDays += 30;
} else if (j == 2) {
if (isLeap(year)) {
yearTotalDays += 29;
} else {
yearTotalDays += 28;
}
}
}
- 问题2:
输出日历格式不对,不能按逻辑正确换行- 原因:
不能清楚的明白星期几与号之间的关系- 解决方案:
for (int j = 1; j <= week; j++) {
System.out.print(" \t");
}
for (int i = 1; i <= days(year, month); i++) {
week++;
System.out.print(i + " \t");
if (week % 7 == 0) {
System.out.println();
}
}
(三)代码托管
- 码云commit历史截图
- 代码在组织中的链接:代码链接
(四)学习进度条
时间 | 代码行数 | 学习时间 | 本周学习内容 |
---|---|---|---|
目标 | 8000 | 3000 | |
第2-4周 | 500/500 | 45/45 | 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中 |
第5周 | |||
第6周 |