目录

前言

设计与分析

踩坑心得

改进建议

总结

前言

这三次作业的知识点覆盖的很全面,从最开始的int赋值变量,循环,到Boolean值,sort等一些函数,到后来的对象,类的创建和声明,getter,setter的方法运用,正则表达式的使用,知识点涉及的比较广。题量和难度比较契合,题目难的时候,题量也会适当下调,题量也没有超过十道题,对于一个星期的期限来说还是很合理。对我来说也能及时完成,总之还是很合理。

题目集1

输入三角形三条边,判断该三角形为什么类型的三角形。

题量:8道

难度:适中

题目集2

题量:5道

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[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) ; //求输入日期的下一天

输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。

难度:适中

题目集3

题量:3道

定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。

编写程序性,实现对简单多项式的导函数进行求解

要求:Date类结构如下图所示:

  1. 如果输入表达式不符合上述表达式基本规则,则输出“Wrong Format”。
  2. 如果输入合法,则在一行内正常输出该表达式的导函数,注意以下几点: 结果不需要排序,也不需要化简;
  • 当某一项为“0”时,则该项不需要显示,但如果整个导函数结果为“0”时,则显示为“0”;
  • 当输出结果第一项系数符号为“+”时,不输出“+”;
  • 当指数符号为“+”时,不输出“+”;
  • 当指数值为“0”时,则不需要输出“x^0”,只需要输出其系数即可。

难度:较难

设计与分析

 

 import java.util.Scanner;

 public class Main {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble(); if(a >200 || b > 200 || c >200 || a < 1 || b < 1 || c < 1) System.out.println("Wrong Format"); else{ if(a >= b + c || b >= a + c || c >= a + b)
System.out.println("Not a triangle"); else if((a*a + b*b == c*c|| b*b + c*c == a*a|| a*a + c*c == b*b)&&a!=b&&b!=c&&a!=c)
System.out.println("Right-angled triangle"); else if(a == b || b == c || a == c)
{if(a*a + b*b - c*c<0.000001|| b*b + c*c -a*a<0.000001|| a*a + c*c- b*b<0.000001) System.out.println("Isosceles right-angled triangle");
else if(a == b && b == c)System.out.println("Equilateral triangle");
else System.out.println("Isosceles triangle");
}
else System.out.println("General triangle"); } }
}
import java.util.Scanner;

public class Main {

    public static boolean isLeapYear(int year) {
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) {
int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)==true)
arr[2] = 29;
if(year>=1820&&year<=2020&&month>0&&month<=12&&day<=arr[month]&&day>0)
return true;
else
return false;
} public static void nextDate(int year,int month,int day) { int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)==true)
arr[2] = 29;
int a = 0,b = 0,c = 0;
if(checkInputValidity(year,month,day)==true) {
if(month==12) {
if(day==arr[month]) {
a = year+1;
b = 1;
c = 1;}
if(day>0&&day<arr[month])
{a = year;
b = month;
c =day +1;
}
}
if(month<12) {
if(day==arr[month]) {
a = year;
b = month + 1;
c = 1;}
if(day>0&&day<arr[month])
{a = year;
b = month;
c = day+1;
}
}
System.out.println("Next date is:"+a+"-"+b+"-"+c);
}
else System.out.println("Wrong Format");
} public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Main x = new Main();
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
x.nextDate(year,month,day); } }
import java.util.Scanner;
public class Main{
public static boolean checkInputValidity(int year,int month,int day,boolean r){
boolean p;
p = true;
if(year < 1820 || year > 2020 || month < 1 || month > 12 || day < 1 || day > 31 ){
p = false;
}
if(!r && day > 28){
p = false;
}
return p;
}
public static void nextDate(int year,int month,int day,boolean r,int n){
int i = month,x = day;
day = x + n; if(!r&&i==2){
if(x + n>28){
day = x + n-28;
month++;
}
} if(r&&i==2){
if(x + n>29){ day = x + n-29; month++;
}
} if(r&&i==3){
if(x + n<=0){
day =29+x+n;
month--;
}
}
if(!r&&i==3){
if(x + n<=0){
day = x + n + 28;
month--;
}
}
if(n + x <=0){
if(i == 1 ){
year--;
day = 31 + (n + x);
month = 12;
}
if(i == 2 || i == 4 || i == 6 || i == 9 || i == 8 || i == 11){
day = 31 + (n + x);
month--;
}
if(i == 5 || i == 7 || i == 10 || i == 12 ){
year--;
day = 30 + (n + x);
month = 12;
}
}
if(n + x >30){
if(i == 12){
if(n+x > 31){
day =(n+x)-31;
year++;
month=1;
}
else
day = 31;
}
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10){
if(n+x > 31){
day =(n+x)-31;
month++;
}
else
day = 31;
}
if(i == 4 || i==6 || i==9 || i==11){
day =(n+x)-30;
month++;
}
}
System.out.printf("%d days ago is:%d-%d-%d",-n,year,month,day);
}
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int year = input.nextInt();
int month = input.nextInt();
int day = input.nextInt();
int n = input.nextInt();
boolean r = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
if(checkInputValidity(year,month,day,r))
nextDate(year,month,day,r,-n); else System.out.println("Wrong Format"); }
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Date date = new Date();
Scanner in = new Scanner(System.in);
int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();
date.setyear(year);
date.setmonth(month);
date.setday(day);
date.nextDate(year,month,day);
}
} class Date{
private int year;
private int month;
private int day;
private int[] arr = {0,31,28,31,30,31,30,31,31,30,31,30,31};
public int getyear() {
return year;
}
public int getmonth() {
return month;
}
public int getday() {
return day;
}
public void setyear(int year) {
this.year=year;
}
public void setmonth(int month) {
this.month=month;
}
public void setday(int day) {
this.day=day;
}
public static boolean isLeapYear(int year) {
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) {
int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)==true)
arr[2] = 29;
if(year>=1900&&year<=2000&&month>0&&month<=12&&day<=arr[month]&&day>0)
return true;
else
return false;
}
public static void nextDate(int year,int month,int day) { int[] arr=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)==true)
arr[2] = 29;
int a = 0,b = 0,c = 0;
if(checkInputValidity(year,month,day)==true) {
if(month==12) {
if(day==arr[month]) {
a = year+1;
b = 1;
c = 1;}
if(day>0&&day<arr[month])
{a = year;
b = month;
c =day +1;
}
}
if(month<12) {
if(day==arr[month]) {
a = year;
b = month + 1;
c = 1;}
if(day>0&&day<arr[month])
{a = year;
b = month;
c = day+1;
}
}
System.out.println("Next day is:"+a+"-"+b+"-"+c);
}
else System.out.println("Date Format is Wrong");
} }
import java.util.Scanner;

import java.util.regex.Pattern;

public class Main{
public static void main(String[] args) {
Scanner p = new Scanner(System.in);
String totalRegex = "([-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?)+";
String sbuRegex = "[-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?";
String in = p.nextLine();
boolean bl=Pattern.matches(totalRegex, in);
if(bl==true)
{
int i;
int y=p.nextInt();
int x=p.nextInt();
int year = p.nextInt();
int month = p.nextInt();
int day = p.nextInt();
System.out.printf(" days ago is:%d-%d-%d",year,month,day);
String a;
String arr[]=new String[4];
a=p.nextLine();
if(a.length()!=32||a.length()==0)
{
System.out.print("Wrong Format");
return;
}
for(i=0;i<a.length();i++)
{
char s=a.charAt(i);
if(s!='0'&&s!='1')
{
System.out.print("Wrong Format");
return;
}
}
}
else
System.out.println("Wrong Format");
} }

踩坑心得

作业集1

7-8:最开始不知道如何判断直角三角形,最后用

a*a + b*b - c*c<0.000001||  b*b + c*c -a*a<0.000001|| a*a + c*c- b*b<0.000001
a*a + b*b == c*c||  b*b + c*c == a*a|| a*a + c*c == b*b)&&a!=b&&b!=c&&a!=c

判断是否为等腰或者直角三角形
作业集2
7-4
刚刚开始做的时候不知道如何把闰年作为返回值传送到主函数。后来在网上查到了Boolean值,然后使用
isLeapYear(int year)这个函数来判断是否为闰年在分情况讨论闰年2月,31天的月份,30天的月份等等情况,最后完成该题
7-5
第一次写这个题,原本最开始是没有什么别的想法的,就觉得只要多讨论几个情况就行,最后if else语句用的太多了,就把自己搞糊涂了,后来用
boolean checkInputValidity(int year,int month,int day,boolean r)这个函数,把Boolean放在函数里面,来判断是不是错误数据
下面就讨论六个情况就可以,直接就可以求出下一天是星期几
作业集3
7-2
这个题就可以直接照着那个题里面的图去做,什么时候用getter 什么时候用setter,题目里面都有涉及,再结合作业集2的7-4。
最开始我是这么做的,很想当然,连题目的那个年份限制变化了我都没看见,就导致了我连续提交了好几次都显示部分错误,看来以后还是要读好题
7-3
最开始和大家一样无从下手,但是学习了正则表达式还有参考了老师发的代码就能写出来,然后在网上差一些关于正则表达式的资料,知道了最基本的规则
改进建议
pta的作业的每一题希望可以多弄些样例,就是输出的例子,可以让做题者更好的理解题的意思,能更快的,更精准的做题

这三次作业的知识跨度比较大,如果能在题目上说明本题所用的知识点会更好

另外可以支持多种方法解决问题,不单单局限于一种方法
对齐下括号.
良好的编码格式和命名。
从语法和算法上精简代码,永远永远不要把同一个变量用于多个不同的目的。
使用自描述的变量名和方法名

方法名应该小写字母开头,其后用字母大写的单词连接(veryLongVariableName)

类名应该都使用首字母大写的单词连接而成常量名应该全部大写,

用下划线连接左大括号应该跟 if 语句在同一行



总结
第一单元作业花费时间:花费时间较短 
第二单元作业花费时间:花费时间较长
 最后一部分作业:花费时间较长。
通过这三次作业,我还是收获了很多知识的。
第一次作业:最基本的赋值,声明变量,for循环,while循环,
if语句,数组的声明,使及其创建。
第二次作业:学会了Boolean语句,知道了如何返回ture和false
以及如何把Boolean放在函数里使用;
判断闰年的方法,
第三次作业:学习了解了对象和类,对象,类的创建和声明,getter,setter的方法运用,正则表达式的使用
每次作业花费的时间较长,需要查阅大量的资料才能解决问题,作业的成功率不高,得到的分数不高。解决方法:遇到不懂的知识点上网查阅资料,请教他人,多看书记住一些基本的知识点。
作为Java的思维来说,
当你拿到一个问题时,你分析这个问题不再是第一步先做什么,
第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,
这是第三点。这些都是面向过程思想所不具备的,在解决一些问题的时候,运用面向对象的思想来编写程序解决问题才是最好的解决方式
作业量可以适当增多,多多给我们练习的机会,适当放慢一些课堂进度,给我们足够的时间去看书,去思考,实验课可以改成三周俩节,适当要宽恕留给我们写报告的时间。
对教师的意见:多多培养我们的动手能力,在课堂上,给我们多一些时间去写自己的代码,老师

Blog作业01的更多相关文章

  1. 课程作业01:模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。

    1.设计思想: 首先是从JavaAppArguments.java示例开始,此示例已打印参数,定义数字 之和和作为存储单位的整型,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序流程图: 3 ...

  2. JAVA自学作业01

    JAVA自学作业01 1.Hello World 程序 class HelloWorld{ public static void main(String args[]){ System.out.pri ...

  3. 2017《Java技术》预备作业01

    2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...

  4. C语言I博客作业01

    C语言I博客作业01 作业1 这个作业属于哪个课程? C语言程序设计I 这个作业要求在哪里? https://edu.cnblogs.com/campus/zswxy/CST2019-2/homewo ...

  5. | C语言I作业01

    C语言I作业01 标签:18软件 李煦亮 1.1 你对软件工程专业了解是怎样? 对软件工程的了解是从人工智能频繁地出现在各大新闻,新闻报道了许多高校针对人工智能开设了相关课程或者专业,软件工程是开设的 ...

  6. C博客作业01——分支,顺序结构

    C博客作业01--分支,顺序结构 0.展示PTA总分 1本章学习内容 1.1学习内容总结 1)格式化输出函数printf(),scanf(). 它是什么? 对于初学者而言,一开始了解接触它们,只是被硬 ...

  7. DS博客作业01—日期抽象数据类型设计与实现

    1.本章学习总结 1.1 思维导图 1.2学习体会 开学就来了个大作业,还要求用的是c++语法,作为一个只听过没学过的未知语法,靠着CSDN和寝室大佬的帮助下渐渐地了解了一些c++的使用,现在也可以使 ...

  8. C博客作业01——分支、顺序结构

    1.本章学习总结 1.1思维导图 本章学习体会及代码量学习体会 1.2.1学习体会 在暑假的时候就有加入新生学习群,对C语言有一定的基础,所以这周的学习相对轻松,但一些细节方面的知识并不是很了解.在这 ...

  9. 《Scrum实战》读书会作业01 - 用知行视角总结现在或者过去的一个项目

    下面是<Scrum实战>读书会的第1个作业,主要是用知行视角来总结回顾现在或者过去的一个项目. 项目背景 2011年初,我做的项目是一个搜索引擎相关的项目,这个项目为公司在全球范围内的金融 ...

  10. c语言博客作业01—分支、顺序结构

    1.本章学习总结  1.1 思维导图  1.2本章学习体会及代码量学习体会  1.2.1学习体会 这周 对c语言的学习 明显与其他同学相比较有些滞后,觉得很大原因是暑假没有看教学视频,课前没有预习课本 ...

随机推荐

  1. K8S实现不同节点POD获取不同IP

    背景介绍 某混合云场景k8s,云上和云下的node,需要将同一个域名解析到不同的IP 方案 利用Coredns+2个第三方插件,fwdpolicy,conditional 编译Coredns(在win ...

  2. vue 生命周期个人理解

    activated():在vue对象存活的情况下,进入当前存在activated()函数的页面时,一进入页面就触发:可用于初始化页面数据等: created():在模板渲染成html前调用,即通常初始 ...

  3. 此平台不支持虚拟化的 Intel VT-x/EPT。不使用虚拟化的 Intel VT-x/EPT,是否继续?

    1.cpu虚拟化是否打开 2.Windows安全中心>设备安全性>内核隔离

  4. leetcode 27. 移除元素 【时间击败100.00%】【内存击败84.67%】

    1 public int removeElement(int[] nums, int val) { 2 int last = nums.length - 1; 3 for (int i = 0; i ...

  5. vue 3 打印 print-js

    1.安装 npm install print-js --save 2.引用 import print from 'print-js' 3.编写打印函数 const enterDialog = asyn ...

  6. QTableWidget CSS样式

    QTableWidget { border:1px solid rgb(170, 170, 127); border-radius:3px; } QScrollBar::handle { backgr ...

  7. Docker部署OpenWRT-旁路由

    1.确认网卡名称 命令 ip addr 显示如下图的 enp2s0 就是我们准备进行链接的网卡名称. 2.打开网卡的混杂模式 sudo ip link set enp2s0 promisc on 3. ...

  8. python3.7 sorted 自定义排序

    from functools import cmp_to_keyls=['9','23','3','56','78']sorted(ls, key=cmp_to_key(lambda x, y: in ...

  9. 学PHP的第二天!

    这是我学PHP的第二天,我改了一些代码,终于把我喜欢的OJ网站的默认模板给改掉了,竟然能用!!!我从来都没有这么的欣喜过,看来PHP果真是一门非常好用的编程语言,但这个OJ有些用的是python的模块 ...

  10. 前端,es6中的promise异步方法,及用的场景

    网上看了些资料,总结以下几种方法 1,数据管道方法,这个方法用的场景:URL1请求返回的数据1,请求URL2的传参是数据1,返回数据2,请求URL3的参数是数据2. new Promise(funct ...