作为一个初学者,简单的谈一下自己的作业心得体会。如果你是完全没有接触过Java的学习,本篇博文可能会有些收获,如果你已经学习Java有一段时间了,那么可以放弃这篇文章了,因为这篇文章讲解的是基本的东西,甚至因为学习深度原因可能会有所错误,仅作为了解Java入门的浅显资料。

Java的基础结构我就不多赘述了,网络上有非常详细的资料,我平常最多使用的是菜鸟教程https://www.runoob.com/java/java-tutorial.html,可以简单了解非常基础。

直接进入正题

初学者的最近的三次作业例题:

  (1)第一次作业例题:

  (代码仅作参考)

  统计最大数出现次数

  编写程序读取一系列整数,找出它们的最大数,然后计算该数的出现次数,假定输入以0结束。

 import java.util.Scanner;

 public class Main {

     public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] complete;
int max = 0;
int i=0;
int n=0;
int count = 0;
complete = new int[10];
do { complete[i] = input.nextInt();
i++;
n++;
}while(complete[i-1]!=0);
for (i = 0; i<n; i++) {
if(max==complete[i])
count++;
else if(complete[i]>max) {
max=complete[i];
count=1;
}
}
System.out.println("The largest number is " + max);
System.out.print("The occurrence count of the largest number is " + count);
} }

第一次作业代码示例

(2)第二次作业例题

求下一天:

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。

要求:Main类中必须含有如下方法,签名如下:

public static void main(String[] args);//主方法

public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型

public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值

public static void nextDate(int year,int month,int day) ; //求输入日期的下一天

 import java.util.Scanner;
public class Main { public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month = input.nextInt();
int day = input.nextInt();
if(checkInputValidity(year,month,day)) {
System.out.println("Wrong Format");
}
else {
nextDate(year,month, day); } }
public static boolean isLeapYear(int year) {
boolean a = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
a = true;
return a;
}
public static boolean checkInputValidity(int year,int month,int day) {
boolean a = false;
if (year < 1820 || year > 2020 || month < 1 || month > 12 || day < 1 || day > 31||((!isLeapYear(year)&&month==2&&day>28)))
a = true;
return a;
}
public static void nextDate(int year,int month,int day) {
int a[]= {31,29,31,30,31,30,31,31,30,31,30,31};//闰年日期
int b[]= {31,28,31,30,31,30,31,31,30,31,30,31};//非闰年日期
if(month==12&&day==31) {
year++;
month=1;
day=1;
}
else if(isLeapYear(year)) {
if(day==a[month-1]) {
month++;
day=1;
}
else
day++;
}
else {
if(day==b[month-1]) {
month++;
day=1;
}
else
day++;
}
System.out.println("Next date is:"+year+"-"+month+"-"+day);
} }

第二次作业代码示例

(3)第三次作业例题

日期类设计:

参考题目集二中和日期相关的程序,设计一个类DateUtil,该类有三个私有属性year、month、day(均为整型数),其中,year∈[1820,2020] ,month∈[1,12] ,day∈[1,31] , 除了创建该类的构造方法、属性的getter及setter方法外,需要编写如下方法:

public boolean checkInputValidity();//检测输入的年、月、日是否合法

public boolean isLeapYear(int year);//判断year是否为闰年

public DateUtil getNextNDays(int n);//取得year-month-day的下n天日期

public DateUtil getPreviousNDays(int n);//取得year-month-day的前n天日期

public boolean compareDates(DateUtil date);//比较当前日期与date的大小(先后)

public boolean equalTwoDates(DateUtil date);//判断两个日期是否相等

public int getDaysofDates(DateUtil date);//求当前日期与date之间相差的天数

public String showDate();//以“year-month-day”格式返回日期值

应用程序共测试三个功能:

1.求下n天

2.求前n天

3.求两个日期相差的天数

 import java.util.Scanner;

 public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int year = 0;
int month = 0;
int day = 0; int choice = input.nextInt(); if (choice == 1) { // test getNextNDays method
int m = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next()); DateUtil date = new DateUtil(year, month, day); if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
} m = input.nextInt(); if (m < 0) {
System.out.println("Wrong Format");
System.exit(0);
} System.out.print(date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " next " + m + " days is:");
System.out.println(date.getNextNDays(m).showDate());
} else if (choice == 2) { // test getPreviousNDays method
int n = 0;
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next()); DateUtil date = new DateUtil(year, month, day); if (!date.checkInputValidity()) {
System.out.println("Wrong Format");
System.exit(0);
} n = input.nextInt(); if (n < 0) {
System.out.println("Wrong Format");
System.exit(0);
} System.out.print(
date.getYear() + "-" + date.getMonth() + "-" + date.getDay() + " previous " + n + " days is:");
System.out.println(date.getPreviousNDays(n).showDate());
} else if (choice == 3) { //test getDaysofDates method
year = Integer.parseInt(input.next());
month = Integer.parseInt(input.next());
day = Integer.parseInt(input.next()); int anotherYear = Integer.parseInt(input.next());
int anotherMonth = Integer.parseInt(input.next());
int anotherDay = Integer.parseInt(input.next()); DateUtil fromDate = new DateUtil(year, month, day);
DateUtil toDate = new DateUtil(anotherYear, anotherMonth, anotherDay); if (fromDate.checkInputValidity() && toDate.checkInputValidity()) {
System.out.println("The days between " + fromDate.showDate() +
" and " + toDate.showDate() + " are:"
+ fromDate.getDaysofDates(toDate));
} else {
System.out.println("Wrong Format");
System.exit(0);
}
}
else{
System.out.println("Wrong Format");
System.exit(0);
}
}
}
class DateUtil {
private static final DateUtil DateUtil = null;
int a[] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// 闰年日期
int b[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };// 非闰年日期
private int year;
private int month;
private int day;
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
public DateUtil(int year2, int month2, int day2) {
year = year2;
month = month2;
day = day2;
}
public boolean checkInputValidity() {//检测输入的年、月、日是否合法
boolean a = true;
if (year < 1820 || year > 2020 || month < 1 || month > 12 || day < 1 || day > 31||((!isLeapYear(year)&&month==2&&day>28))||((isLeapYear(year)&&month==2&&day>29)))
a = false;
return a;
}
public boolean isLeapYear(int year) {//判断year是否为闰年
boolean a = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
a = true;
return a;
}
public DateUtil getNextNDays(int n) {//取得year-month-day的下n天日期
DateUtil date = new DateUtil(year, month, day);
long c = (long) n;
long d = (long) date.day;
long sum = c + d;
while(sum>a[date.month-1]||sum>b[date.month-1]) {
if(isLeapYear(date.year)) {//瑞年
while(sum>a[date.month-1]) {//计算瑞年天
sum = sum -a[date.month -1];
if(date.month == 12) {
date.year++;
date.month=1;
if(!isLeapYear(date.year)) {
break;
}
}else {
date.month++;
}
} } else{//非瑞年
while(sum>b[date.month-1]) {//计算非瑞年天
sum = sum -b[date.month -1];
if(date.month == 12) {
date.year++;
date.month=1;
if(isLeapYear(date.year)) {
break;
}
}else {
date.month++;
}
} }
}
int Sum = new Long(sum).intValue();
date.day = Sum;
return date; }
public DateUtil getPreviousNDays(int n) {//取得year-month-day的前n天日期
DateUtil date = new DateUtil(year, month, day);
int sum = n;
if(n!=0) {
date.day--;
} if(sum>date.day) {//减去原始天数
sum = sum -date.day;
date.month--;
if(isLeapYear(date.year)) {
date.day = a[date.month-1];
}else {
date.day = b[date.month-1];
}
}else if(sum==date.day) {
sum=0;
if(date.month==1) {
date.year--;
date.month=12;
if(isLeapYear(date.year)) {
date.day = a[date.month-1];
}else {
date.day = b[date.month-1];
}
}
date.month--;
if(isLeapYear(date.year)) {
date.day = a[date.month-1];
}else {
date.day = b[date.month-1];
} }
while(sum>=date.day) {
if(isLeapYear(date.year)) {//瑞年
while(sum>=date.day) {
if(date.month==1) {
date.year--;
date.month=12;
if(sum>=b[date.month-1]) {
date.day = b[date.month-1];
sum = sum-date.day;
}else {
date.day = b[date.month-1];
sum = date.day-sum;
}
}
else if(sum>=a[date.month-1]) {
date.day = a[date.month-1];
sum = sum-date.day;
date.month--;
}
else {
date.day = a[date.month-1];
sum = date.day-sum;
date.month--;
} if(!isLeapYear(date.year)) {
break;
}
}
}else {//非瑞年
while(sum>=date.day) {
if(date.month==1) {
date.year--;
date.month=12;
if(sum>=b[date.month-1]) {
date.day = b[date.month-1];
sum = sum-date.day;
}else {
date.day = b[date.month-1];
sum = date.day-sum;
}
}
else if(sum>=b[date.month-1]) {
date.day = b[date.month-1];
sum = sum-date.day;
date.month--;
}
else {
date.day = b[date.month-1];
sum = date.day-sum;
date.month--;
} if(isLeapYear(date.year)) {
break;
}
}
}
}
date.day =date.day-sum;
return date;
}
public boolean compareDates(DateUtil date) {//比较当前日期与date的大小(先后)
boolean a = false;
if(year>date.year||year==date.year&&month>date.month||year==date.year&&month==date.month&&date.day>day) {
a = true;
}
return a;
}
public boolean equalTwoDates(DateUtil date) {//判断两个日期是否相等
boolean a = false;
if(year==date.year&&month==date.month&&date.day==day) {
a = true;
}
return a;
}
public int getDaysofDates(DateUtil date) {//求当前日期与date之间相差的天数
int sum = 0;
if(!equalTwoDates(date)) {
if(!compareDates(date)) {//date.year>year
while(date.year>year) {
if(isLeapYear(year)) {
year++;
sum+=366;
}else {
year++;
sum+=365;
} }
if(isLeapYear(year)) {
while(date.month>month) {
sum+=a[month-1];
month++;
}
}else {
while(date.month>month) {
sum+=b[month-1];
month++;
}
}if(day>date.day) {
sum+=day-date.day;
}else{
sum+=date.day-day;
}
}else {//year>date.year
while(year>date.year) {
if(isLeapYear(date.year)) {
date.year++;
sum+=366;
}
else {
date.year++;
sum+=365;
}
}
if(isLeapYear(date.year)) {
while(month>date.month) {
sum+=a[date.month-1];
date.month++;
}
}else {
while(month>date.month) {
sum+=b[date.month-1];
date.month++;
}
}
if(day>date.day) {
sum+=day-date.day;
}else{
sum+=date.day-day;
}
}
}
return sum;
}
public String showDate() {//以“year-month-day”格式返回日期值
return year+"-"+month+"-"+day;
} }

第三次作业代码示例  

  

初学者第一次学习Java的时候,最懵的是类与对象,而Java是面向对象的语言,什么是类,什么是对象?

对象:对象是类的一个实例,有状态和行为。

类:类是一个模板,它描述一类对象的行为和状态。

这是一般的说法,刚接触java时有些看不懂,但如果你学习过一段时间的Java回头去看这两句话却会有种恍然大悟的感觉,发现这两句话描述的十分准确,不过对于初学者来说理解这两句话就有些困难了。

举个例子让我们来理解一下面向对象与面向过程的区别:

  就像人走路

  面向过程可能是这样实现的,大脑中枢一级一级的传递信息,再传递给肌肉,你的左脚或者你的右脚动了动了,让后再一级一级的传递信息,你的另一只脚动了,你便实现了走路。

  而面向对象可能是这样实现的,大脑告诉左脚:动,然后告诉另一只脚:动,你就实现了走路。

  你的脚就可以创建一个类,它有温度等其他状态,也有内部神经传递的行为。而类是虚的抽象的,可以想象一下3D打印机,类是在电脑中创建的模型,你需要打印出来才能成为对象,它才能实现各种功能,不同对象可以根据状态区分,不仅能打印出来41码的脚,还能打印出来42码的脚。

  我们可以清晰的看到,作业代码的长度是逐渐增加的,代码的难度也是逐渐增加的,但我们关注的重点是代码的演变,这是一个从面向过程到面向对象的演变过程。因为刚接触java时,第一次作业难度并不高,因为所有功能都能在Main类里快速实现,把Main类当成C语言的main函数一样使用,实现方法更像是面向过程的语言;第二次作业根据作业要求,让人有意识地在Main类中添加了方法,但思想上还是停留在函数上,思想上觉得方法类似于C语言函数调用;第三次作业在Main类之外又写了新类DateUtil,之后又在DateUtil的基础上写了Year、Month、Day、等类,一次次作业让我们将面向过程的思想过渡为面向对象的思想,这时候就渐渐的感觉到了两者的不同。

  其实,面向过程与面向对象都是只是一种思维方式,根据第一次作业,我们能够用面向过程的思维方式实现代码功能,但假如后两次作业没有前置条件,我们也能用面向过程的思维方式实现代码共能,相对而言面向对象的思维方式更像是我们平常的思考方式,就好像走路,我们只要给左右脚下达命令,我们就能实现走路的目标。

  当你理解了面向对象的思想,剩余需要注意的就是代码的严谨性。例如求日期的上N天日期,你要考虑月份减一,年份减一,瑞年与非瑞年的情况等等,常常会因为代码结构或者逻辑算法不够严谨而付出代价,这个代价往往是大量检验与修改的时间。当谈到检验呢,就不得不说代码测试的重要性,当我们的代码出现了问题。对于新手来说一般会遇到两个问题,一个是不知道自己错在哪,一个是知道哪错了不会改,前者的问题往往比后者更严重;知道了错误方式网络上有大量的教程,可不知道自己哪错了便无从下手。拥有一个好的测试方式可以快速准确的找到自己的错误点,以“上N天”为例,我检测的方式往往是特殊值,边界值,由小及大,但还是浪费了大量的时间,因为往往是屡改屡错,让人抓狂。但是如果不进行测试,单单凭借自己的思考:代码哪里出现了错误?略短的代码可能稍加思考便可找出,但随着代码复杂程度的增加,这种方式变得越来越不可能。

  再说回代码的严谨性,如果你最开始的时候便进行了严谨的考虑,那么你后续的工作会轻松不少;如若不是,那你可能就要万里长征了。

  在文章的最后,感谢各位可以看到这里。在Java学习中,实践大于理论,更多的实际操作,往往会得到更好的学习效果。鄙人初学四周,一些心得体会,也是希望自己未来在Java学习方面取得更好的成果。

Java初学者最近三次作业的心得体会的更多相关文章

  1. 2017-2018-1 JAVA实验站 第三周作业

    2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...

  2. 2017-2018-1 Java演绎法 第三周 作业

    团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...

  3. Java初学者笔记三:关于字符串和自实现数组常见操作以及异常处理

    一.字符串常见的操作 1.结合我在python中对于字符串常见处理总结出下面三个应该能算是字符串造作的TOP 3 //字符串查找子串,存在返回index,不存在返回-1 等于python的find: ...

  4. Java程序设计第三次作业

    编写“学生”类及其测试类. 5.1 “学生”类: 类名:Student 属性:姓名.性别.年龄.学号.5门课程的成绩 方法1:在控制台输出各个属性的值. 方法2:计算平均成绩 方法3:输出各个属性的值 ...

  5. Java ee第三周作业

    listener: Listener是JavaWeb的三大组件Servlet.Filter.Listener之一 Listener的中文名称为监听器,它是Servlet的监听器,它可以监听客户端的请求 ...

  6. java 程序设计第三次作业内容

    第一题:输出结果是什么? System.out.println("5+5="+5+5); 第二题:输出结果是什么? int a=3,b; b=a++; sop("a=&q ...

  7. Java程序设计(三)作业

    题目1:用户输入学号,如果是以ccutsoft开头,并且后边是4位数字,前两位大于06小于等于当前年份.判断用户输入是否合法.ccutsoft_0801. 1 //题目1:用户输入学号,如果是以abc ...

  8. java 初学者 第一阶段作业编程总结及心得体会

    0.前言 第一阶段java作业分为3次. 第一次作业是简单得一些语法和一些简单得逻辑思维,主要内容有求三角形是什么三角形的,还有就是求坐标点所在范围的,也涉及到了数字和字母的转换,总之相相当于是给ja ...

  9. 1903021121—刘明伟—Java第三周作业—学习在eclipse上创建并运行java程序

    项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第三周作业 作业要求 每道题要有题目,代码,截图 扩展阅读 eclipse如何创建java程序 java语言基础(上) 扩展阅读心得: 想 ...

随机推荐

  1. CentOS 7 Docker安装

    1. uname -a 查询机器信息,确保CPU为64位,且Linux内核在3.10版本以上 2. 更新yum包: yum update 3. 在 /etc/yum.repos.d下创建 docker ...

  2. LeetCode | 169. 多数元素

    给定一个大小为 n 的数组,找到其中的多数元素.多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [3,2,3] ...

  3. 标准与扩展ACL

    标准与扩展ACL 案例1:配置标准ACL 案例2:配置扩展ACL 案例3:配置标准命名ACL 配置扩展命名ACL 1 案例1:配置标准ACL 1.1 问题 络调通后,保证网络是通畅的.同时也很可能出现 ...

  4. [SCF+wetest+jmeter]简单云性能压测工具使用方案

    前言 压测太难?局域网压力无法判断服务器网络指标?无法产生非常大的并发量?云性能太贵? 也许我们可以把各种简单的工具拼起来进行压力测试! 准备 https://cloud.tencent.com/pr ...

  5. Java第二十九天,文件及目录的管理,File类

    一.基础知识点 1.路径分隔符 (1)什么是路径分隔符? 这个多被应用在环境变量设置当中,例如当我设置Path环境变量时,多个环境变量的路径要用 ':'(Windows系统用封号分隔)或 ':'(Li ...

  6. canvas压缩、裁切图片和格式转换的方法

    按照大小压缩图片,或者按照特定分辨率裁切图片,转为blob数据.自动处理ios中可能存在的照片偏差90°问题. 例如,获取300*300大小的头像,实现以下效果: 使用方式: <!-- 引入js ...

  7. PHP程序员的能力水平层次(一)

    前言 之前看过很多篇关于服务端工程师和PHP开发者的能力模型介绍,每篇都对能力有侧重点. 下面我们来详细谈谈以开发能力为基准点的PHP程序员的能力水平层次. 层层递进 1.功能开发 这个水平的程序员一 ...

  8. python3(二十六)slots

    """ """ __author__ = 'shaozhiqi' # python是动态语言,所以定义类后,我们可以动态的给类绑定属性和方法 ...

  9. 使用malloc和free函数进行内存动态分配

    一.在学习c语言里面,内存分配这个话题非常有意思,因为我们平时在开发的时候,如果一不小心没注意内存释放的话,写的的程序很容易出错,所以今天就来回顾一下c语言里面的内存动态分配,下面我们先来看一个实例来 ...

  10. python从零开始基础入门——开发环境搭建

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:山海皆可平z PS:如有需要Python学习资料的小伙伴可以加点击下方 ...