Blog作业01
目录
前言
设计与分析
踩坑心得
改进建议
总结
前言
这三次作业的知识点覆盖的很全面,从最开始的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类结构如下图所示:
- 如果输入表达式不符合上述表达式基本规则,则输出“Wrong Format”。
- 如果输入合法,则在一行内正常输出该表达式的导函数,注意以下几点: 结果不需要排序,也不需要化简;
- 当某一项为“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的更多相关文章
- 课程作业01:模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。
1.设计思想: 首先是从JavaAppArguments.java示例开始,此示例已打印参数,定义数字 之和和作为存储单位的整型,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序流程图: 3 ...
- JAVA自学作业01
JAVA自学作业01 1.Hello World 程序 class HelloWorld{ public static void main(String args[]){ System.out.pri ...
- 2017《Java技术》预备作业01
2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...
- C语言I博客作业01
C语言I博客作业01 作业1 这个作业属于哪个课程? C语言程序设计I 这个作业要求在哪里? https://edu.cnblogs.com/campus/zswxy/CST2019-2/homewo ...
- | C语言I作业01
C语言I作业01 标签:18软件 李煦亮 1.1 你对软件工程专业了解是怎样? 对软件工程的了解是从人工智能频繁地出现在各大新闻,新闻报道了许多高校针对人工智能开设了相关课程或者专业,软件工程是开设的 ...
- C博客作业01——分支,顺序结构
C博客作业01--分支,顺序结构 0.展示PTA总分 1本章学习内容 1.1学习内容总结 1)格式化输出函数printf(),scanf(). 它是什么? 对于初学者而言,一开始了解接触它们,只是被硬 ...
- DS博客作业01—日期抽象数据类型设计与实现
1.本章学习总结 1.1 思维导图 1.2学习体会 开学就来了个大作业,还要求用的是c++语法,作为一个只听过没学过的未知语法,靠着CSDN和寝室大佬的帮助下渐渐地了解了一些c++的使用,现在也可以使 ...
- C博客作业01——分支、顺序结构
1.本章学习总结 1.1思维导图 本章学习体会及代码量学习体会 1.2.1学习体会 在暑假的时候就有加入新生学习群,对C语言有一定的基础,所以这周的学习相对轻松,但一些细节方面的知识并不是很了解.在这 ...
- 《Scrum实战》读书会作业01 - 用知行视角总结现在或者过去的一个项目
下面是<Scrum实战>读书会的第1个作业,主要是用知行视角来总结回顾现在或者过去的一个项目. 项目背景 2011年初,我做的项目是一个搜索引擎相关的项目,这个项目为公司在全球范围内的金融 ...
- c语言博客作业01—分支、顺序结构
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 这周 对c语言的学习 明显与其他同学相比较有些滞后,觉得很大原因是暑假没有看教学视频,课前没有预习课本 ...
随机推荐
- 根据XML生成实体类
因为对接系统的XML所需映射的实体类有几十个,自己来处理不太现实,于是一直找寻找这样的工具,终于让我发现了jaxb2-maven-plugin: http://www.mojohaus.org/jax ...
- 树莓派4B使用花生壳phtunnel内网穿透访问本地Gogs
已经搭建好Gogs(https://www.cnblogs.com/congyinew/p/16115074.html),接下来就是想外网上传代码到Gogs 一.申请账号 https://open.o ...
- Android 隐藏和显示软键盘
1 public static void hideKeyboard(View view){ 2 InputMethodManager imm = (InputMethodManager) view.g ...
- React脚手架的使用
初始化项目 npx create-react-app my-app // 或 npm init react-app my-app // 或 yarn create react-app my-app 启 ...
- Software--电商平台--Module 5 Order & Payment
2018-01-10 14:11:30 电商平台 订购和支付 模块 一: 整体示意图 二:构建一个框架来处理 领域模型内部发生的事情--领域事件 IDomainEvent 标识模型中的 Domain ...
- Java poi导入Excel
public MessageTo insertExcel(MultipartFile file) { try { InputStream is = file.getInputStream(); Wor ...
- Linux基础第六章:逻辑卷的使用、扩容和磁盘配额
一.逻辑卷的使用及扩容 1.概念优点及注意事项 2.使用命令及基本格式 3.创建逻辑卷 ①创建物理卷 ②创建卷组 ③创建逻辑卷 ④格式化.挂载yk26逻辑卷在/mnt下并在逻辑卷yk26下创建文件a. ...
- holiday06-英语语法-语序和五种基本句式
第六天 英语五种基本句式: 基本句式一:S V (主+谓) 基本句式二:S V P (主+系+表) 基本句式三:S V O (主+谓+宾) 基本句式四:S V o O(主+谓+间宾+直宾) 基本句式五 ...
- 逆向学习物联网-网关ESP8266-03软件编程实现
1.技术原理及流程 1) MQTT数据通讯原理 2).网关协议运行状态机 3). 主程序流程 2.关键程序代码实现 MDK集成开发环境的搭建,大家可以百度搜索,或者参考感知层的软件设计部分. 1) ...
- NX 二次开发,线性移动uf5943
#include <uf.h> #include <uf_modl.h> #include <uf_part.h> #include <uf_modl_pri ...