题目集1~3的总结Blog1

------------恢复内容开始------------

------------恢复内容开始------------

目录

一、前言

二、设计与分析

三、采坑心得

四、改进建议

五、总结

 

一、前言

(1)总结三次题目集的知识点

       这三次的作业主要以我们自己自学为主。除了老师讲的知识点,更多的是要我们自己翻书,从书上找,不懂得也是到网上找视频自学。

       第一次作业中是以C语言为主的题目,更多的是想考查我们对C语言学习的情况。考查了我们输入输出,电话中数字与字母的转化、选择、条件语句(if...else、switch...case)、整数与小数的转化、排序、数组等知识点。

       第二次作业则慢慢进入了Java的领域,考察了我们进制之间的转化、合并升序数组、判断闰年和星期几及几天之后或之前的日子等知识点。

       第三次作业则是考查了我们最近刚涉及的类和对象、比较难理解的正则表达式等知识点。

(2)题量

       这三次作业的题量是慢慢减少的,从开始的7题到第二次作业的5题再到这次的三题。

(3)难度

       这三次作业的题目量虽然是慢慢减少的,但这难度可是加了不少,理解能力要稍微跟的上。

二、设计与分析

题1集7-8代码:

import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner x=new Scanner(System.in);
float a=x.nextFloat(),b=x.nextFloat(),c=x.nextFloat();
if(a>=1&&a<=200&&b>=1&&b<=200&&c>=1&&c<=200)
{
if(a+b>c&&a+c>b&&c+b>a)
{
               if(a==b&&b==c)
               System.out.println("Equilateral triangle");
                else if((a==c||b==c||a==b)&&(Math.abs(Math.sqrt(a)-b)<0.1||Math.abs(Math.sqrt(b)-a)<0.1||Math.abs(Math.sqrt(b)-c)<0.1))
                System.out.println("Isosceles right-angled triangle");
                else if(a==c||b==c||a==b)
                System.out.println("Isosceles triangle");
                else if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)
                System.out.println("Right-angled triangle");
                else
                System.out.println("General triangle");
            }
            else
                System.out.println("Not a triangle");
        }
    else
        System.out.println("Wrong Format");
}}

这道题先是看题目,开始的时候自己不懂,不知道是老师没讲还是我没听,不懂得还是到网上查或者问同学,最后也是知道了一些皮毛......

       这道题是让我去判断不同类型的三角形,了解每种三角形类型的条件是什么,再用代码表示出来就差不多了。

题目集2的7-4代码:

import java.util.Scanner;
public class Main {
public static boolean isLeapYear(int year)
{
int n;
if((year%4==0&&year%100!=0||year%400==0))
{
return true;//布尔运算
}
else
{
return false;
}
}
public static boolean checkInputValidity(int year,int month,int day)
{
if(year<1820||year>2020||month<1||month>12||day<1||day>31)
{
return false;//布尔
}
else
{
if(!isLeapYear(year)&&month==2&&day>28)
{
return false;
}
else if(isLeapYear(year)&&month==2&&day>29)
{
return false;
}
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)
{
return false;
}
else if((month==4||month==6||month==9||month==11)&&day>30)
{
return false;
}
else
return true;
}}
public static void nextDate(int year,int month,int day)
{
switch (month)
{
case 1:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 2:
if(isLeapYear(year)&&day==29)
{month++;
day=1;
}
if(!isLeapYear(year)&&day==28)
{month++;
day=1;
}
else
{day++;
}
break;
case 3:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 4:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 5:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 6:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 7:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 8:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 9:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 10:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 11:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 12:
if(day==31)
{year++;
month=1;
day=1;
}
else
{day++;
}
break;
}
System.out.println("Next date is:"+year+"-" + month + "-" + day);//输出下一天
}
public static void main(String[] args) {
Scanner x= new Scanner(System.in);//主方法
int year=x.nextInt();
int month=x.nextInt();
int day=x.nextInt();
boolean a=checkInputValidity(year,month,day);
if(a==false)//布尔
{
System.out.println("Wrong Format");
}
else if(a==true)
{
nextDate(year,month,day);
}
}
}

刚看到这道题是是有点懵的,不知道是老师没讲还是自己没听,这我对方法不是很理解,不会用,到网上查和问同学才知道点......

             这道题是要我们求下一天,题目也给我们了一些方法,按照这些方法把错误的日子全部排除,再判断闰年2月、平年2月等的一些特殊情况就差不多了。

题目集2的7-5代码:


import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner x= new Scanner(System.in);
boolean f=true;//布尔运算
int y=0,m=0,a=0,n=0;
if (x.hasNextInt())
y=x.nextInt();
else
f=false;
if (x.hasNextInt())
m=x.nextInt();
else
f=false;
if (x.hasNextInt())
a= x.nextInt();
else
f=false;
if (x.hasNextInt())
n=x.nextInt();
else
f=false;

if (checkInputValidity(y,m,a,n)&&f){
nextDate(y,m,a,n);
}else
System.out.println("Wrong Format");

}
public static boolean isLeapYear(int year) {
boolean y=false;//布尔
if ((year%100!=0&&year%4==0)||(year%400==0)){
y=true;
}
return y;
}

public static boolean checkInputValidity(int year,int month,int day,int n){
boolean y=false;//布尔
int[] b={31,28,31,30,31,30,31,31,30,31,30,31};
if (isLeapYear(year))b[1]=29;
if ((year>=1820&&year<=2020)&&(month>=1&&month<=12)&&(day>=1&&day<=b[month-1])){//此处的month-1用来判断不同年份的不同月份的数据是否合法
y=true;
}
return y;
}

public static void nextDate(int year,int month,int day,int n) {
int[] b={0,31,28,31,30,31,30,31,31,30,31,30,31};
if (isLeapYear(year))b[2]=29;
day-=n;
if (n>0){
while (day<=0){
month--;
if (month==0){
month+=12;
year--;
}
day+=b[month];
}
}else if (n<0){
while (day>b[month]) {
day-=b[month];
month++;
if (month==13){
month-=12;
year++;
}
}
}
System.out.printf("%d days ago is:%d-%d-%d\n",n,year,month,day);
}
}

这道题和7-4的题型是差不多的,个人感觉还是更难了一点,不过有了上一题的一点点的经验这题还是少了一些“磕磕绊绊”。

       这道题是让我们求前几天或者是后几天,还要分情况来看这天前后几天的日子,这样就会更麻烦,更复杂,更难了。

这道题让我更加深入的了解方法,其他倒也没什么。

题目集3的7-2代码:

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner x= new Scanner(System.in);//主方法
Date Date1=new Date();
int year=x.nextInt();
int month=x.nextInt();
int day=x.nextInt();
Date1.checkInputValidity(year,month,day);
Date1.isLeapYear(year);
Date1.setYear(year);
Date1.setMonth(month);
Date1.setDay(day);
Date1.nextdate(year,month,day);
x.close();
}
}
class Date{
private int year;
private int month;
private int day;
public Date(){

}
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 boolean isLeapYear(int year)
{

if((year%4==0&&year%100!=0||year%400==0))
{
return true;//布尔运算
}
else
{
return false;
}
}
public boolean checkInputValidity(int year,int month,int day)
{
if(year<1900||year>2000||month<1||month>12||day<1)
{
return false;//布尔
}
else
{
if(!isLeapYear(year)&&month==2&&day>28)
return false;
else if(isLeapYear(year)&&month==2&&day>29)
return false;
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)
return false;
else if((month==4||month==6||month==9||month==11)&&day>30)
return false;
else
return true;
}}
public void nextdate(int year,int month,int day)
{
if(month==1){
if(day==31){
month++;
day=1;
}
else
day++;
}
else if(month==2){//判断2月
if(isLeapYear(year)&&day==29)
{month++;
day=0;
}
if(!isLeapYear(year)&&day==28)
{month++;
day=1;
}
else
day++;}
else if(month==3){//判断三月
if(day==31)
{month++;
day=1;
}
else
{ day++;}
}
else if(month==4){//判断4月
if(day==30)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==5){//判断5月
if(day==31)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==6){//判断6月
if(day==30)
{month++;
day=1;
}
else
day++;
}
else if(month==7){//判断7月
if(day==31){
month++;
day=1;}
else
{day++;
}
}
else if(month==8){//判断8月
if(day==31){
month=9;
day=1;}
else
day++;
}
else if(month==9){//判段9月
if(day==30){
month=10;
day=1;}
else
day++;
}
else if(month==10){//判断10月
if(day==31){
month=11;
day=1;}
else
day++;
}
else if(month==11){//判断11月
if(day==30){
month=12;
day=1;}
else
day++;
}
else if(month==12){//判断12月
if(day==31)
{year++;
month=1;
day=1;
}
else
{day++;
}
}
else
{ System.out.println("Date Format is Wrong");}
System.out.println("Next day is:"+year+"-" + month + "-" + day);//输出下一天
}
}

 这道题其实是和上次题目集的第四题差不多的,就是要用一个类封装,其他的倒也没什么。

       这道题难就难在自己对还没学的类不了解,就很难下手,很多结构不知道,还得多翻书,到网上查资料。

心得:这道题也是让我对类有了更加深刻的理解。

题目集3的7-3代码:无

这道题是关于多项式求导,我不太会,在网上找了一些关于正则表达式的知识,不过只学到了怎么用代码表示数字、字母、空格啥的,具体算法还没太搞明白。

心得:这道题也是让我明白了正则表达式的一些东西......

三、采坑心得

           基本上每道题都有自己所困惑的地方,也都是经过同学的改错啥的和自己的不断地运行得到的,但由于没保存那些过程中的东西。总之,我遇到的问题也不少:

        刚开始是自己对Java中的结构不了解,虽然知道题目的架构,但不知道Java中该怎么写,下不了手,之后还是问同学和查书才知道的。 然后是算法的问题,可能是忘了的原因吧,只能到网上查资料了。

        就还是拿题目集3的7-2来说吧。

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner x= new Scanner(System.in);//主方法
Date Date1=new Date();
int year=x.nextInt();
int month=x.nextInt();
int day=x.nextInt();
Date1.checkInputValidity(year,month,day);
Date1.isLeapYear(year);
Date1.setYear(year);
Date1.setMonth(month);
Date1.setDay(day);
Date1.nextdate(year,month,day);
x.close();
}
}
class Date{
private int year;
private int month;
private int day;
public Date(){

}
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 boolean isLeapYear(int year)
{

if((year%4==0&&year%100!=0||year%400==0))
{
return true;//布尔运算
}
else
{
return false;
}
}
public boolean checkInputValidity(int year,int month,int day)
{
if(year<1900||year>2000||month<1||month>12||day<1)
{
return false;//布尔
}
else
{
if(!isLeapYear(year)&&month==2&&day>28)
return false;
else if(isLeapYear(year)&&month==2&&day>29)
return false;
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)
return false;
else if((month==4||month==6||month==9||month==11)&&day>30)
return false;
else
return true;
}}
public void nextdate(int year,int month,int day)
{
if(month==1){
if(day==31){
month++;
day=1;
}
else
day++;
}
else if(month==2){//判断2月
if(isLeapYear(year)&&day==29)
{month++;
day=0;
}
if(!isLeapYear(year)&&day==28)
{month++;
day=1;
}
else
day++;}
else if(month==3){//判断三月
if(day==31)
{month++;
day=1;
}
else
{ day++;}
}
else if(month==4){//判断4月
if(day==30)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==5){//判断5月
if(day==31)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==6){//判断6月
if(day==30)
{month++;
day=1;
}
else
day++;
}
else if(month==7){//判断7月
if(day==31){
month++;
day=1;}
else
{day++;
}
}
else if(month==8){//判断8月
if(day==31){
month=9;
day=1;}
else
day++;
}
else if(month==9){//判段9月
if(day==30){
month=10;
day=1;}
else
day++;
}
else if(month==10){//判断10月
if(day==31){
month=11;
day=1;}
else
day++;
}
else if(month==11){//判断11月
if(day==30){
month=12;
day=1;}
else
day++;
}
else if(month==12){//判断12月
if(day==31)
{year++;
month=1;
day=1;
}
else
{day++;
}
}
else
{ System.out.println("Date Format is Wrong");}
System.out.println("Next day is:"+year+"-" + month + "-" + day);//输出下一天
}
}

这个代码是没有得满分的,它是边界测试点和平年的2月29没过。

如果拿1939年2月29日去测试,它输出的是1939年3月1日,就出现问题了,而用题目的12月25日去测试,输出的则是对的:12月26日。这应该就是用类和不用类的一大差别吧。其他的没有保存,就没什么说的了。

四、改进建议

        每道题的答案都是在跌跌撞撞中得出的,不断地尝试、改进......不过现在那些过程中的错误我也没有保留,就只能说一说题目集3的7-2了:

        这道题本来和上次作业的某道题差不多的,所以我就把上次答案弄过来了,当然这其中也有些许的改动,但是这还是不太符合题意的。这道题是要用类的方法,而上次那题并没有用类。所以我就重新进行加工,加一个类的方法:

改进前:

 

import java.util.Scanner;
public class Main {
public static boolean isLeapYear(int year)
{
int n;
if((year%4==0&&year%100!=0||year%400==0))
{
return true;//布尔运算
}
else
{
return false;
}
}
public static boolean checkInputValidity(int year,int month,int day)
{
if(year<1820||year>2020||month<1||month>12||day<1||day>31)
{
return false;//布尔
}
else
{
if(!isLeapYear(year)&&month==2&&day>28)
{
return false;
}
else if(isLeapYear(year)&&month==2&&day>29)
{
return false;
}
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)
{
return false;
}
else if((month==4||month==6||month==9||month==11)&&day>30)
{
return false;
}
else
return true;
}}
public static void nextDate(int year,int month,int day)
{
switch (month)
{
case 1:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 2:
if(isLeapYear(year)&&day==29)
{month++;
day=1;
}
if(!isLeapYear(year)&&day==28)
{month++;
day=1;
}
else
{day++;
}
break;
case 3:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 4:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 5:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 6:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 7:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 8:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 9:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 10:
if(day==31)
{month++;
day=1;
}
else
{day++;
}
break;
case 11:
if(day==30)
{month++;
day=1;
}
else
{day++;
}
break;
case 12:
if(day==31)
{year++;
month=1;
day=1;
}
else
{day++;
}
break;
}
System.out.println("Next date is:"+year+"-" + month + "-" + day);//输出下一天
}
public static void main(String[] args) {
Scanner x= new Scanner(System.in);//主方法
int year=x.nextInt();
int month=x.nextInt();
int day=x.nextInt();
boolean a=checkInputValidity(year,month,day);
if(a==false)//布尔
{
System.out.println("Wrong Format");
}
else if(a==true)
{
nextDate(year,month,day);
}
}
}

改进后:

import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner x= new Scanner(System.in);//主方法
Date Date1=new Date();
int year=x.nextInt();
int month=x.nextInt();
int day=x.nextInt();
Date1.checkInputValidity(year,month,day);
Date1.isLeapYear(year);
Date1.setYear(year);
Date1.setMonth(month);
Date1.setDay(day);
Date1.nextdate(year,month,day);
x.close();
}
}
class Date{
private int year;
private int month;
private int day;
public Date(){

}
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 boolean isLeapYear(int year)
{

if((year%4==0&&year%100!=0||year%400==0))
{
return true;//布尔运算
}
else
{
return false;
}
}
public boolean checkInputValidity(int year,int month,int day)
{
if(year<1900||year>2000||month<1||month>12||day<1)
{
return false;//布尔
}
else
{
if(!isLeapYear(year)&&month==2&&day>28)
return false;
else if(isLeapYear(year)&&month==2&&day>29)
return false;
else if((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)
return false;
else if((month==4||month==6||month==9||month==11)&&day>30)
return false;
else
return true;
}}
public void nextdate(int year,int month,int day)
{
if(month==1){
if(day==31){
month++;
day=1;
}
else
day++;
}
else if(month==2){//判断2月
if(isLeapYear(year)&&day==29)
{month++;
day=0;
}
if(!isLeapYear(year)&&day==28)
{month++;
day=1;
}
else
day++;}
else if(month==3){//判断三月
if(day==31)
{month++;
day=1;
}
else
{ day++;}
}
else if(month==4){//判断4月
if(day==30)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==5){//判断5月
if(day==31)
{month++;
day=1;
}
else
{day++;
}
}
else if(month==6){//判断6月
if(day==30)
{month++;
day=1;
}
else
day++;
}
else if(month==7){//判断7月
if(day==31){
month++;
day=1;}
else
{day++;
}
}
else if(month==8){//判断8月
if(day==31){
month=9;
day=1;}
else
day++;
}
else if(month==9){//判段9月
if(day==30){
month=10;
day=1;}
else
day++;
}
else if(month==10){//判断10月
if(day==31){
month=11;
day=1;}
else
day++;
}
else if(month==11){//判断11月
if(day==30){
month=12;
day=1;}
else
day++;
}
else if(month==12){//判断12月
if(day==31)
{year++;
month=1;
day=1;
}
else
{day++;
}
}
else
{ System.out.println("Date Format is Wrong");}
System.out.println("Next day is:"+year+"-" + month + "-" + day);//输出下一天
}
}

改进前和改进后其实是差不多的,只是多了一个类,还多用了一些关于类中的方法,主函数也是按照类的形式改进了,其他的倒也没什么。

 

五、总结

        对于这三次作业我学会了类的基本使用方法,对类的理解更加深入了一点,相当于“模糊”的复习了一次C语言。我了解了我自己不太会去翻书,学习的欲望不是那么的强烈,重心也没有一定程度的往这方面,自己还需要多花点时间到这上面,毕竟这是自己的专业课,多学一点总没有坏处。

       对教师的改进建议及意见:无。

       对课程的改进建议及意见:无。

       对作业的改进建议及意见:希望以第一次最高分为标准改为最后一次提交为标准。

       对实验的改进建议及意见:无。

       对课上的改进建议及意见:希望可以更加调动我们的学习气氛。

       对课下组织方式等方面的改进建议及意见:无。

 

------------恢复内容结束------------

------------恢复内容结束------------

posted @ 2021-04-02 21:06  等待dengdai  阅读(67)  评论(0)    收藏  举报