前三次作业总结
前三次作业总结
第一次作业总结
1.前言
第一次作业主要包含对于Java.util工具库的使用以及数据之间进行强制转换。第一次作业中基本没有包含面向对象的程序设计,主要是锻炼对于设计程序的思想训练。这一次的作业基本上是基于面向过程的程序,只包含Main一个主类。
2.设计与分析
1.分析
第一次作业中后几题中对于程序的设计没有考虑程序的耦合性,尤其是7-5和7-6中只使用了if else来进行判断,没有使用String数组来保存数据进行判断同时对于数据的运算没有考虑int,float,double之间的转换导致的运算结果的缺失,同时对于数据长度判断时使用的length也初步的掌握,同时对于比较数据使用的==和equals()之间比较方法的区别也掌握一些,==是比较基本类型时比较的是表面值的内容,equals()是比较两个对象的内存地址值。
2.设计
第一次作业的设计仅仅使用一个主类Main,没有设计其他类,只通过输入和输出进行数据之间的运行,判断和比较
3.采坑心得
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner (System.in) ; float a,n; float b; n = in.nextFloat(); a = in.nextFloat(); if(n<=0||a<=0){ System.out.println("Wrong Format"); return; } b = (float)((a+(float)(n/a))/2.0); while(Math.abs(b-a)>=0.00001){ a=b; b = (float)((a+(float)(n/a))/2.0); } System.out.print(a); } }
7-8中存在一个测试点无法过去,最后发现因为结果错误导致的,检查后发现我输出的值是b,而b的值是多一次计算过后,应该输出b的值
4.主要困难以及改进意见
1.困难
第一次作业主要没有针对题目需求来设计并进行架构
2.改进意见
应对数据判断单独设计类,没有考虑到程序的耦合性,后续也没有对于程序进行测试,应该再次测试改进一部分
第二次作业总结
1.前言
本次作业对于我有很大难度,首先,本次作业需要很好的理解并且运用类和对象之间的关系.
并且还需要熟悉和掌握java中库的使用,同时本次作业是对于菜单函数的设计以及增加改进后的程序
2.设计与分析
1.分析
对于7-1和7-2中的设计题目中已经给出了类的名字和对象的名称。
7-1是需要对于题目给出的需求来进行程序的编程。
其中需要对已给出的菜品和价格存入数组中,同时还要通过用户输入的数字来判断菜品的份额,使用switch函数的功能来判断此菜品的价格,但是所设计的函数没有设计除1,2,3之外错误数字的报错
而7-2的函数则是要基于·7-1中的函数来进行程序的升级,需要对输入的菜品进行序号的排序,同时还增加了删除菜品的功能,其中删除菜品需要提供查找序号的功能,需要对存入数组中的序号来及进行,删除菜品的功能增加在订单中,而且删除菜品需要使用序号来进行菜品的查找。
本次程序设计包含了面向对象的方法
2.设计


7-1 因为题目给出了各个类的名字,所以通过题目就可以设计出大致的框架以及所包含的关系
7-2通过题目的提醒也能准确的将增加的功能加入到订单中
3.采坑心得
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String a; Menu p = new Menu(); Order l = new Order(); int rj = 0; while (true) { a = in.nextLine(); if (a==end) break; String[] b = a.split(" "); l.records[rj] = new Record(); l.records[rj] = l.addARecord(b[0], Integer.parseInt(b[1])); rj++; } Dish q; for (int i = 0; i < rj; i++) { q = p.searthDish(l.records[i].d.name); if (q == null) { System.out.println(l.records[i].d.name + " does not exist"); } else { l.records[i].d.unit_price=q.unit_price; } } System.out.println(l.getTotalPrice()); } } class Dish { String name; int unit_price; int getPrice(int portion) { if (portion == 1) { return ((int) (Math.round(unit_price * 1.0))); } if (portion == 2) { return ((int) (Math.round(unit_price * 1.5))); } if (portion == 3) { return ((int) (Math.round(unit_price * 2.0))); } return 0; } } class Menu { Dish[] z=new Dish[4]; Dish searthDish(String dishName) { z[0]=new Dish(); z[1]=new Dish(); z[2]=new Dish(); z[3]=new Dish(); z[0].name="西红柿炒蛋"; z[1].name="清炒土豆丝"; z[2].name="麻婆豆腐"; z[3].name="油淋生菜"; z[0].unit_price=15; z[1].unit_price=12; z[2].unit_price=12; z[3].unit_price=9; for(int i=0;i<4;i++) { if(dishName.equals(z[i].name)) { return z[i]; } } return null; } } class Record { Dish d=new Dish(); int portion; int getPrice() { return d.getPrice(portion); } } class Order { Record[] records=new Record[30000]; int sum=0; int i1; int getTotalPrice() { for(int i=0;i<i1;i++) { sum=sum+records[i].getPrice(); } return sum; } Record addARecord(String dishName,int portion) { Record o=new Record(); o.d.name=dishName; o.portion = portion; i1++; return o; } }
没有考虑到输入时空格的存在,导致读取时发生了错误
7-2中将序号的设计放在了主函数main中
4.主要困难以及改进意见
1.困难
补充类时没有及时考虑到几个类之间包含的关系导致无法进行程序的基础设计
2.改进意见
没有进行程序的测试,同时没有考虑程序运行时可能出现的错误只考虑了输入错误名字没有设计其他程序运行的保护措施
第三次作业
1.前言
第三次作业中同样包含了菜单函数,此次的菜单函数是前两次函数所增加新功能的函数
同时其余题目也时考虑了除了对于util中Scanner的用法也包含使用了util中其他功能的使用
2.设计与分析
1.设计
菜单函数又增加了时间的管理以及代带点菜的功能,因为没有一定的思路来进行代点菜功能的实现导致本次题目没能进行有效的设计
同时还涵盖了打折的功能导致需要使用time库的使用
其他函数则不同程度的测试了对于其他库的使用,以及除Scanner的util库的使用
2.分析
由于对于面向对象方法的不理解导致整体菜单函数的设计出现了问题
其他题目设计则进行了不同于第一和第二次作业的方法,那就是设计不同的类来进行程序的运行和判断其中7-5的面向对象程序编程让我一定程度的了解了面向对象的方法
3.采坑心得
import java.util.Scanner; import java.util.Arrays; public class Main{ public static void main (String[] args){ Scanner in = new Scanner(System.in); int n=in.nextInt(); int []a=new int [n]; for(int i=0;i<n;i++){ a[i]=in.nextInt(); } Arrays.sort(a); if(n==1) System.out.print("NO"); else{ for(int i=0;i<n-1;i++){ if(a[i]==a[i+1]){ System.out.print("YES"); break; } else System.out.print("NO"); } } }
import java.util.*; public class Main{ public static void main (String[] args){ Scanner in = new Scanner(System.in); int n=in.nextInt(); int []a=new int [110000]; int b=0; int []c=new int [110000]; for(int i=0;i<n;i++){ int x=in.nextInt(); if(c[x]!=0){ continue; } c[x]=1; a[b++]=x; } for(int j=0;j<b-1;j++){ System.out.print(a[j]+" "); } System.out.print(a[b-1]); } }
7-2和7-3在运行功能时出现了运行超时的问题
7-2在设计初期我使用了for循环来进行重复数的判断,但出现了内存超限的报错,但在使用Arrays.sort(a)函数后数组中数字大小按顺序进行排序后for循环只需要判断读入数组后一位是否与其相同,不需要考虑内存超限和运行超时的错误
7-3则需要使用两个数组来判断该数字是否已经出现,但开始时我只是使用了Arrays.sort(a)函数排序后进行比较相同则只读入一个,但是出现了运行超时的报错,应该是与for函数的叠用有关
4.困难与改进意见
1.困难
菜单函数多次出现面向对象的设计,同时菜单函数又增加了时间的管理以及代带点菜的功能,因为没有一定的思路来进行代点菜功能的实现导致本次题目没能进行有效的设计
同时还涵盖了打折的功能导致需要使用time库的使用,导致我无法通过时间来进行菜品价格计算
而代点菜功能需要添加不同的数组来进行计价,前期菜单函数没有考虑全面而出现现如今的错误
2.改进意见
需要改变之前面向过程的程序思路进而改变为面向对象的设计思路
同时还需要学习其余库的使用和用法
总结
对于这三次作业中所出现的面向对象的设计思路需要进行理解和吸收
同时还要学习其他库的使用和用法
思考架构也让我受益匪浅,至少能利用面向对象的思想,把一个具体的事物抽象出数据类型和操作了。真正的数据类型不仅仅是存储,而在于性质和操作的捆绑
这几次的作业也提高了我对于程序运行超时和内存不足问题的注意,同时还要减少函数的耦合性

浙公网安备 33010602011771号