代码优化1:将A类体现出了封装性(BC类同理)。
1 package aaa; 2 import java.util.Scanner; 3 //工具类 4 public class Text1 { 5 static int sum; 6 public int count(int start,int end){ 7 int []arr1={-2574,-4010,8243,771,2447,-5197,2556,8044,3314,3617,6065,-2817,3131,6318,2186,-113,629,-2582,-37,-1520,164,2055,-5936,5912,1717,5988,4781,5757,892,-4394,8034,2213,-1080,-2080,5364,106,2657,566,3940,-5116,4583,1806,6555,2621,-7197,528,1626,18,1049,6243,3198,4397,-1325,9087,936,-6291,662,-178,135,-3473,-2385,-165,1713,-7949,-4234,1138,2212,104,6968,-3632,3801,1137,-1296,-1215,4272,6223,-5922,-7723,7044,-2938,-8180,1356,1159,-4022,-3713,1158,-8715,-4081,-2541,-2555,-2284,461,940,6604,-3631,3802,-2037,-4354,-1213,767}; 8 for(int i=start;i<=end;++i) 9 { 10 sum+=arr1[i]; 11 } 12 return sum; 13 } 14 //测试类 15 public static void main(String[]args){ 16 Scanner se = new Scanner(System.in) ; 17 System.out.println("请输入start:"); 18 int start = se.nextInt() ; 19 System.out.println("请输入end:"); 20 int end =se.nextInt(); 21 System.out.println("start为:" +start); 22 System.out.println("end为:" +end); 23 Text1 tt=new Text1(); 24 tt.count(start,end); 25 System.out.println(sum); 26 } 27 28 }
代码优化2:ABC类实现用代码读取数据(使用.txt格式)
A类:
1 package aaa; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.util.Scanner; 5 public class A { 6 public int sum=0; 7 //工具类 8 public int count(int start,int end){ 9 Scanner inputStream = null; 10 int[]arr1 = new int[65536];//动态初始化 11 try 12 { 13 inputStream = new Scanner(new File("D:\\test.txt"));//使用inputStream读取数据 14 } 15 catch(FileNotFoundException A)//用于捕获文件无法读取异常 16 { 17 System.out.println("文件有问题");//如果文件无法正常读取,输出文件无法读取 18 System.exit(0); 19 } 20 for (int row=0;row<65536;row++) 21 { 22 String line = inputStream.nextLine();//将test.txt中读取的一行赋值给line 23 arr1[row] = Integer.parseInt(line); //将line分配到二维数组的指定存储空间 24 } 25 for(int i=start;i<=end;i++) 26 { 27 sum+=arr1[i]; 28 } 29 return sum; 30 } 31 //测试类 32 public static void main(String[]args){ 33 A tt=new A(); 34 Scanner se = new Scanner(System.in) ; 35 System.out.println("请输入start:"); 36 int start = se.nextInt() ; 37 System.out.println("请输入end:"); 38 int end =se.nextInt(); 39 System.out.println("start为:" +start); 40 System.out.println("end为:" +end); 41 tt.count(start,end); 42 System.out.println("和为"+tt.sum); 43 } 44 }
B类:
1 package aaa; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.util.Scanner; 5 public class B { 6 public int sum=0; 7 public void count(int start1,int start2,int end1,int end2){ 8 Scanner inputStream = null; 9 int[][]arr2 = new int[2][65536]; 10 try 11 { 12 inputStream = new Scanner(new File("D:\\test.txt")); 13 } 14 catch(FileNotFoundException A) 15 { 16 System.out.println("文件无法读取"); 17 System.exit(0); 18 } 19 for (int row=0;row<2;row++) 20 { 21 for (int column=0;column<65536;column++) 22 { 23 String line = inputStream.nextLine(); 24 arr2[row][column] = Integer.parseInt(line); 25 } 26 } 27 28 for(int i=start1;i<=end1;i++) 29 { 30 for(int j=start2;j<=end2;j++) 31 { 32 sum+=arr2[i][j]; 33 } 34 } 35 } 36 public static void main(String[]args) 37 { 38 B tt=new B(); 39 Scanner se = new Scanner(System.in); 40 System.out.println("输入start-x:"); 41 int start1 = se.nextInt(); 42 System.out.println("输入end-x:"); 43 int end1 =se.nextInt(); 44 System.out.println("x从" +start1+"到"+end1); 45 System.out.println("输入start-y:"); 46 int start2 =se.nextInt(); 47 System.out.println("输入end-y:"); 48 int end2 =se.nextInt(); 49 System.out.println("y从"+start2+"到"+end2); 50 tt.count(start1,end1,start2,end2); 51 System.out.println("和为"+tt.sum); 52 } 53 }
C类:
1 package aaa; 2 import java.io.File; 3 import java.io.FileNotFoundException; 4 import java.util.Scanner; 5 public class C { 6 public int sum=0; 7 public void count(int start1,int start2,int end1,int end2,int start3,int end3){ 8 Scanner inputStream = null; 9 int[][][]arr3 = new int[3][256][256]; 10 try 11 { 12 inputStream = new Scanner(new File("D:\\test.txt")); 13 } 14 catch(FileNotFoundException A) 15 { 16 System.out.println("文件无法读取"); 17 System.exit(0); 18 } 19 for (int row=0;row<3;row++) 20 { 21 for (int column=0;column<256;column++) 22 { 23 for(int deep=0;deep<256;deep++) 24 {String line = inputStream.nextLine(); 25 arr3[row][column][deep] = Integer.parseInt(line); 26 } 27 } 28 } 29 {for(int i=start1;i<=end1;i++) 30 { 31 for(int j=start2;j<=end2;j++) 32 { 33 for(int k=start3;k<=end3;k++) 34 { 35 sum+=arr3[i][j][k]; 36 } 37 } 38 }} 39 } 40 public static void main(String[]args) 41 { 42 C tt=new C(); 43 Scanner se = new Scanner(System.in) ; 44 System.out.println("请输入start-x:"); 45 int start1 = se.nextInt() ; 46 System.out.println("请输入end-x:"); 47 int end1 =se.nextInt(); 48 System.out.println("start-x为:" +start1); 49 System.out.println("end-x为:" +end1); 50 51 System.out.println("请输入start-y:"); 52 int start2 = se.nextInt() ; 53 System.out.println("请输入end-y:"); 54 int end2 =se.nextInt(); 55 System.out.println("start-y为:" +start2); 56 System.out.println("end-y为:" +end2); 57 58 System.out.println("请输入start-z:"); 59 int start3 = se.nextInt() ; 60 System.out.println("请输入end-z:"); 61 int end3 =se.nextInt(); 62 System.out.println("start-z为:" +start3); 63 System.out.println("end-z为:" +end3); 64 tt.count(start1,end1,start2,end2,start3,end3); 65 System.out.println("和为"+tt.sum); 66 } 67 }
成员:林杰,张振渊
关于代码优化(数据的读取),以下是张振渊同学的感悟:
从刚开始在老师给出的链接里下载到excel格式的文件开始,我基本没有考虑过通过程序读取器中的数据,思考方式还停留在从一个文件中复制到另一个文件中。由于第一次作业数据量
并不大所以并没有遇到多少问题。但是看到后续作业的时候我也认识到这样的方法在遇到大量数据的时候是行不通的。由于直接读取excle的方法常常需要借助一些第三方插件,所以老师
们在qq群里面建议我们先将excel转换成csv格式是个更好的方法。不过由于我对csv格式比较陌生,所以最后还是选择了比较熟悉、泛用性又高的txt格式。通过网上的一些搜索与学习,
很快就找到了读取的方法与代码。最后就做成了以上的样子。
关于代码优化(类的封装性),以下是林杰同学的感悟:
以前在上Java基础课程的时候已经知道类具有封装性,但是对封装性没有过多的印象和感受,但是通过和张振渊同学对书上两个关于的代码的反复研究后(我们首先写出我们自己理解中
具有封装性的ABC类,然后相互交换代码和意见,比较各自的类和书上例题的不同),最后将杂乱的代码优化成一个具有两个模块(属性和功能)的类后,我对封装性也有了进一步的理解,
也知道在写类的过程中,要用变量来描述出属性,用方法来体现出类具体的功能。在测试类中给出你要实现的功能,在方法类中给出你要写出的属性。好比一个扫把,它的制作过程和制
作的原理就是我们要写的工具类,我们拿扫把来扫地就是我们写出的测试类。总而言之,我对类的封装性有了新的认识。
结对编程照片:
小结:我们并没有如愿完成Junit单位测试,我们在写D类时出现种种疑问,并且浪费了时间拖延了进度然后发现一直在做无用功,最终还是没能写出一个能作为基类的类。我们知道作业中要求我们写出一个作为父类的D类能继承ABC的功能,我们开始认为D类应该是要包含ABC类的属性,然后删除我们原来在ABC类内的工具类,通过ABC类继承D类来实现对一二三维的指定范围的相加。后来我们又觉得应该要拿D类来实现ABC类的三个功能,并且要用到类似于switch{case1,case2,case3}这样的语句来执行3个功能。于是我们对这两种方法进行尝试均未得到满意的答案,也拖延了后面的任务。但是本次的作业也有了挺大的收获,感觉自己动手做中学习到的知识往往比单纯的授课学到的东西更令人有深刻的印象,也希望自己能够通过不断的实践来对以前的知识进行查漏补缺以及点亮自己编程天赋树中更多的技能。