10-16周综合性总结(21201205-江向斌)
1.前言:
本阶段pta中主要关于java语言的基本程序设计,知识点涉及从最基础的命名变量到对象和类,其中包括了选择结构,循环结构,数学函数,字符和字符串以及方法的定义与调用,还有数组的使用等内容。更重要的是详细考察了java的封装,继承,多态的三大特性,同时深入学习了java的抽象函数,抽象类,还学习了java的集合框架(包括Arraylist类,各种集合类以及接口的使用还有迭代器Iterator的使用等等复杂内容),并且我们也学习了文件流,如何将数据写入文件,从文件中读出等等,还有图形界面javafx,GUI等等内容以及部分有关异常知识,总的来说着6周非常充实,学习内容量大且深入!题量适中,均能在规定时间内做完,但不一定能做全对。难度各不相同,第一题十分困难属于电话计费的题目,考察了多类的使用以及集合框架等等如容还有正则表达式的运用,思路也难,一时半会难以解决并且很难得到高分,属于非常锻炼我们java能力的题目,一开始敲击代码就会发现细节很难把握到位,尤其是有关于输入测试的部分尤为突出,明显很难考虑到每一个方面以至于无法拿到满分,总会有测试点过不了。第二题和第三题反而为一些简单的题目,都是多类的运用或者是迭代器Iterator的使用或者是集合框架的考察譬如implement move()接口的使用等等。
超星中的实验主要是针对了多个类的运用,强调有关于数据的封装还有java语言的其他两大特性,继承以及多态。通过农夫过河游戏的巧妙设计,我们能更好的理解这些。题量不算大,并且给我们的时间也很多,难度适中,涉及的知识点虽然都是刚学的或还没学的但是题目难度不难也不深入。并且超星系统因为其独特的功能,预防了我们复制粘贴的行为的发生,并且超星系统上直接写代码,也比在eclipse上写代码更加锻炼我们的语法能力和代码的规范意识。尤其是实验五,实验五真正的让我们完成了一个游戏的制作,使用了javafx工具实现了图形界面化,让农夫过河变得让用户可直接操作性,性能更好。实验四也让我们更好的理解了抽象类的使用以及继承等内容,将简单的农夫过河游戏代码框架化,可读性增强,更加专业化对我们未来真正着手写项目代码的影响深远,作用很大。
总的来说,Java又是我们本学期第一次接触的语言,对Java语言的运用还有些许生疏,对语法的理解和java整体的结构把握不够清晰以及有关与行间距的习惯等还有很大进步空间,需要加强训练以求熟练。
2.设计分析:
PTA大作业6
7-1 电信计费系列1-座机计费



1 import java.util.ArrayList; 2 import java.util.Date; 3 import java.util.Scanner; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 7 abstract class CallChargeRule extends ChargeRule{//计费规则父类 8 public double calCost(ArrayList<CallRecord> callRecords){ 9 return 1; 10 } 11 } 12 13 class CallRecord extends CommunicationRecord {//具体的某一通话记录类 14 private Date StartTime; 15 private Date endTime; 16 private String callingAddressAreaCode; 17 private String answerAddressAreaCode; 18 19 public Date getStartTime() { 20 return StartTime; 21 } 22 23 public void setStartTime(Date startTime) { 24 StartTime = startTime; 25 } 26 27 public Date getEndTime() { 28 return endTime; 29 } 30 31 public void setEndTime(Date endTime) { 32 this.endTime = endTime; 33 } 34 35 public String getCallingAddressAreaCode() { 36 return callingAddressAreaCode; 37 } 38 39 public void setCallingAddressAreaCode(String callingAddressAreaCode) { 40 this.callingAddressAreaCode = callingAddressAreaCode; 41 } 42 43 public String getAnswerAddressAreaCode() { 44 return answerAddressAreaCode; 45 } 46 47 public void setAnswerAddressAreaCode(String answerAddressAreaCode) { 48 this.answerAddressAreaCode = answerAddressAreaCode; 49 } 50 } 51 52 abstract class ChargeMode {//计费规则的合计 53 private ArrayList<ChargeRule> chargeRules = new ArrayList<ChargeRule>(); 54 55 public ArrayList<ChargeRule> getChargeRules() { 56 return chargeRules; 57 } 58 59 public void setChargeRules(ArrayList<ChargeRule> chargeRules) { 60 this.chargeRules = chargeRules; 61 } 62 63 public double calCost(UserRecords userRecords){ 64 return 1; 65 } 66 67 public double getMonthlyRen(){ 68 return 1; 69 } 70 } 71 72 abstract class ChargeRule { 73 public double calCost(ArrayList<CallRecord> callRecords){ 74 return 1; 75 } 76 } 77 78 abstract class CommunicationRecord { 79 private String callingNumber; 80 private String answerNumber; 81 82 public String getCallingNumber() { 83 return callingNumber; 84 } 85 86 public void setCallingNumber(String callingNumber) { 87 this.callingNumber = callingNumber; 88 } 89 90 public String getAnswerNumber() { 91 return answerNumber; 92 } 93 94 public void setAnswerNumber(String answerNumber) { 95 this.answerNumber = answerNumber; 96 } 97 } 98 99 class LandlinePhoneCharging extends ChargeMode { 100 private double monthlyRent = 20; 101 102 @Override 103 public double calCost(UserRecords userRecords){//计算消费 104 double cost1,cost2,cost3; 105 cost1 = getChargeRules().get(0).calCost(userRecords.getAnswerInCityRecords()); 106 cost2 = getChargeRules().get(1).calCost(userRecords.getAnswerInProvinceRecords()); 107 cost3 = getChargeRules().get(2).calCost(userRecords.getAnswerInLandRecords()); 108 return cost1 + cost2 + cost3 + monthlyRent; 109 } 110 111 @Override 112 public double getMonthlyRen(){ 113 return monthlyRent; 114 } 115 } 116 117 class LandPhoneInCityRule extends CallChargeRule{ 118 @Override 119 public double calCost(ArrayList<CallRecord> callRecords){ 120 long miao = 0; 121 long fen = 0; 122 long sum= 0; 123 for(int i=0;i<callRecords.size();i++){ 124 callRecords.get(i); 125 miao=(callRecords.get(i).getEndTime().getTime()-callRecords.get(i).getStartTime().getTime())/1000; 126 fen = miao / 60; 127 if(miao % 60!=0){ 128 fen = fen + 1; 129 } 130 sum=sum+fen; 131 } 132 return sum*0.1; 133 } 134 } 135 136 class LandPhoneInlandRule extends CallChargeRule{ 137 @Override 138 public double calCost(ArrayList<CallRecord> callRecords){ 139 long miao = 0; 140 long fen = 0; 141 long sum= 0; 142 for(int i=0;i<callRecords.size();i++){ 143 callRecords.get(i); 144 miao=(callRecords.get(i).getEndTime().getTime()-callRecords.get(i).getStartTime().getTime())/1000; 145 fen = miao / 60; 146 if(miao % 60!=0){ 147 fen = fen + 1; 148 } 149 sum=sum+fen; 150 } 151 return sum*0.6; 152 } 153 } 154 155 class LandPhoneInProvinceRule extends CallChargeRule{ 156 @Override 157 public double calCost(ArrayList<CallRecord> callRecords){ 158 long miao = 0; 159 long fen = 0; 160 long sum= 0; 161 for(int i=0;i<callRecords.size();i++){ 162 callRecords.get(i); 163 miao=(callRecords.get(i).getEndTime().getTime()-callRecords.get(i).getStartTime().getTime())/1000; 164 fen = miao / 60; 165 if(miao % 60!=0){ 166 fen = fen + 1; 167 } 168 sum=sum+fen; 169 } 170 return sum*0.3; 171 } 172 } 173 174 public class Main { 175 public static void main(String[] args) { 176 ArrayList<User> Users = new ArrayList<>(); 177 int numC = 0; 178 String callNumber; 179 String answerNumber; 180 String startTime; 181 String endTime; 182 String line; 183 CallRecord callRecord; 184 LandPhoneInCityRule a0 =new LandPhoneInCityRule(); 185 LandPhoneInProvinceRule a1 = new LandPhoneInProvinceRule(); 186 LandPhoneInlandRule a2 =new LandPhoneInlandRule(); 187 ArrayList<ChargeRule> c = new ArrayList<>(); 188 c.add(a0); 189 c.add(a1); 190 c.add(a2); 191 Scanner a = new Scanner(System.in); 192 String kh = ("[u]-0791[0-9]{7,8}\\s[0]"); 193 String jl = "[t]-0791[0-9]{7,8}\\s0[0-9]{9,11}\\s((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})\\.(((0?[13578]|1[02])\\.(0?[1-9]|[12][0-9]|3[01]))|(([469]|11)\\.([1-9]|[12][0-9]|30))|(2\\.([1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})([48]|[2468][048]|[13579][26])|(([48]|[2468][048]|[3579][26])00))\\.2\\.29))\\s([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])\\s((([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})\\.((([13578]|1[02])\\.([1-9]|[12][0-9]|3[01]))|(([469]|11)\\.([1-9]|[12][0-9]|30))|(2\\.([1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})([48]|[2468][048]|[13579][26])|(([48]|[2468][048]|[3579][26])00))\\.2\\.29))\\s([0-1]?[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])"; 194 line = a.nextLine(); 195 while (!line.equals("end")){ 196 if (line.matches(kh)) { 197 String[] kh1 = line.split("-"); 198 kh1 = kh1[1].split(" "); 199 for(User x:Users){ 200 if(x.getNumber().equals(kh1[0])){ 201 numC = 1; 202 break; 203 } 204 } 205 if(numC == 0){ 206 User user = new User(); 207 user.setNumber((kh1[0])); 208 Users.add(user); 209 } 210 }else if(line.matches(jl)){ 211 String[] jl1 = line.split("-"); 212 jl1 = jl1[1].split(" "); 213 callNumber = jl1[0]; 214 answerNumber = jl1[1]; 215 callRecord = new CallRecord(); 216 callRecord.setCallingNumber(callNumber); 217 callRecord.setCallingAddressAreaCode(callNumber.substring(0,4)); 218 callRecord.setAnswerNumber(answerNumber); 219 callRecord.setAnswerAddressAreaCode(answerNumber.substring(0,4)); 220 try{ 221 SimpleDateFormat aq2 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 222 startTime = jl1[2]+" "+jl1[3]; 223 endTime = jl1[4]+" "+jl1[5]; 224 Date stareTimeDate = aq2.parse(startTime); 225 Date endTimeDate = aq2.parse(endTime); 226 callRecord.setStartTime(stareTimeDate); 227 callRecord.setEndTime(endTimeDate); 228 callRecord.setCallingNumber(callNumber); 229 callRecord.setCallingAddressAreaCode(callNumber.substring(0,4)); 230 callRecord.setAnswerNumber(answerNumber); 231 callRecord.setAnswerAddressAreaCode(answerNumber.substring(0,4)); 232 for(User user: Users){//存通话记录 233 if(user.getNumber().equals(callNumber)&&endTimeDate.getTime()>stareTimeDate.getTime()){ 234 if(user.getNumber().substring(0,4).equals(callRecord.getAnswerAddressAreaCode())){ 235 user.getUserRecords().addAnswerInCityRecords(callRecord); 236 }else if(callRecord.getAnswerNumber().startsWith("079")|| callRecord.getAnswerNumber().startsWith("0701")){ 237 user.getUserRecords().addAnswerInProvinceRecords(callRecord); 238 }else{ 239 user.getUserRecords().addAnswerInLandRecords(callRecord); 240 } 241 } 242 } 243 } catch (ParseException e) { 244 throw new RuntimeException(e); 245 } 246 } 247 line = a.nextLine(); 248 } 249 for(User user:Users){ 250 user.getChargeMode().setChargeRules(c); 251 } 252 for(int i=0;i<Users.size()-1;i++){ 253 for(int j=i+1;j<Users.size();j++){ 254 if(Double.parseDouble(Users.get(i).getNumber())>Double.parseDouble(Users.get(j).getNumber())){ 255 User con; 256 con = Users.get(i); 257 Users.set(i,Users.get(j)); 258 Users.set(j,con); 259 } 260 } 261 } 262 for(User user: Users){ 263 user.setBalance(user.getBalance()-user.getChargeMode().calCost(user.getUserRecords())); 264 System.out.printf("%s ",user.getNumber()); 265 System.out.printf("%.1f ",80-user.getBalance()); 266 System.out.printf("%.1f\n",user.getBalance()); 267 } 268 } 269 } 270 271 class MessageRecord extends CommunicationRecord{ 272 private String message; 273 274 public String getMessage() { 275 return message; 276 } 277 278 public void setMessage(String message) { 279 this.message = message; 280 } 281 } 282 283 class User { 284 private UserRecords userRecords = new UserRecords(); 285 private double balance = 100; 286 private ChargeMode chargeMode = new LandlinePhoneCharging(); 287 private String number ; 288 289 public UserRecords getUserRecords() { 290 return userRecords; 291 } 292 293 public void setUserRecords(UserRecords userRecords) { 294 this.userRecords = userRecords; 295 } 296 297 public double getBalance() { 298 return balance; 299 } 300 301 public void setBalance(double balance) { 302 this.balance = balance; 303 } 304 305 public ChargeMode getChargeMode() { 306 return chargeMode; 307 } 308 309 public void setChargeMode(ChargeMode chargeMode) { 310 this.chargeMode = chargeMode; 311 } 312 313 public String getNumber() { 314 return number; 315 } 316 317 public void setNumber(String number) { 318 this.number = number; 319 } 320 321 public double calBalance(){ 322 323 return 1; 324 } 325 326 public double calCost(){ 327 328 return 1; 329 } 330 } 331 332 class UserRecords { 333 private ArrayList<CallRecord> callingInCityRecords = new ArrayList<CallRecord>(); 334 private ArrayList<CallRecord> callingInProvinceRecords = new ArrayList<CallRecord>(); 335 private ArrayList<CallRecord> callingInLandRecords = new ArrayList<CallRecord>(); 336 private ArrayList<CallRecord> answerInCityRecords = new ArrayList<CallRecord>(); 337 private ArrayList<CallRecord> answerInProvinceRecords = new ArrayList<CallRecord>(); 338 private ArrayList<CallRecord> answerInLandRecords = new ArrayList<CallRecord>(); 339 private ArrayList<MessageRecord> sendMessageRecords = new ArrayList<MessageRecord>(); 340 private ArrayList<MessageRecord> receiveMessageRecords = new ArrayList<MessageRecord>(); 341 342 public ArrayList<MessageRecord> getSendMessageRecords() { 343 return sendMessageRecords; 344 } 345 346 public ArrayList<MessageRecord> getReceiveMessageRecords() { 347 return receiveMessageRecords; 348 } 349 350 public ArrayList<CallRecord> getCallingInCityRecords() { 351 return callingInCityRecords; 352 } 353 354 public ArrayList<CallRecord> getCallingInProvinceRecords() { 355 return callingInProvinceRecords; 356 } 357 358 public ArrayList<CallRecord> getCallingInLandRecords() { 359 return callingInLandRecords; 360 } 361 362 public ArrayList<CallRecord> getAnswerInCityRecords() { 363 return answerInCityRecords; 364 } 365 366 public ArrayList<CallRecord> getAnswerInProvinceRecords() { 367 return answerInProvinceRecords; 368 } 369 370 public ArrayList<CallRecord> getAnswerInLandRecords() { 371 return answerInLandRecords; 372 } 373 374 public void addCallingInCityRecords(CallRecord callRecord) { 375 callingInCityRecords.add(callRecord); 376 } 377 378 public void addCallingInProvinceRecords(CallRecord callRecord) { 379 callingInProvinceRecords.add(callRecord); 380 } 381 382 public void addCallingInLandRecords(CallRecord callRecord) { 383 callingInLandRecords.add(callRecord); 384 } 385 386 public void addAnswerInCityRecords(CallRecord callRecord) { 387 answerInCityRecords.add(callRecord); 388 } 389 390 public void addAnswerInProvinceRecords(CallRecord callRecord) { 391 answerInProvinceRecords.add(callRecord); 392 } 393 394 public void addAnswerInLandRecords(CallRecord callRecord) { 395 answerInLandRecords.add(callRecord); 396 } 397 public void addSendMessageRecords(CallRecord callRecord) { 398 399 } 400 401 public void addReceiveMessageRecords(CallRecord callRecord) { 402 403 } 404 405 public void addSendMessageRecords(MessageRecord messageRecord) { 406 sendMessageRecords.add(messageRecord); 407 } 408 409 public void addReceiveMessageRecords(MessageRecord messageRecord) { 410 receiveMessageRecords.add(messageRecord); 411 } 412 }

有图有真相!!!!!!!!!!!
本题难点主要体现在对正则表达式的陌生,以及多类的结合运用,包括了迭代器,集合框架等等,题目难度高但是十分锻炼java水平
代码分析:1.输入判断:
- 1、逐行输入南昌市用户开户的信息,每行一个用户,
格式:u-号码 计费类型 (计费类型包括:0-座机 1-手机实时计费 2-手机A套餐)
例如:u-079186300001 0
座机号码除区号外由是7-8位数字组成。
本题只考虑计费类型0-座机计费,电信系列2、3题会逐步增加计费类型。
2、逐行输入本月某些用户的通讯信息,通讯信息格式:
座机呼叫座机:t-主叫号码 接听号码 起始时间 结束时间
t-079186330022 058686330022 2022.1.3 10:00:25 2022.1.3 10:05:11
以上四项内容之间以一个英文空格分隔,
时间必须符合"yyyy.MM.dd HH:mm:ss"格式。提示:使用SimpleDateFormat类。
以上两类信息,先输入所有开户信息,再输入所有通讯信息,最后一行以“end”结束。
2.数据处理:
- 过于复杂三言两语难以概括,你写了你也懂!
3.输出处理:
- 根据输入的详细通讯信息,计算所有已开户的用户的当月费用(精确到小数点后2位,
单位元)。假设每个用户初始余额是100元。
每条通讯信息单独计费后累加,不是将所有时间累计后统一计费。
格式:号码+英文空格符+总的话费+英文空格符+余额
每个用户一行,用户之间按号码字符从小到大排序。 -
7-2 多态测试
-
import java.util.Scanner; import java.util.ArrayList; abstract class Container{ public static final double pi=3.1415926; public abstract double area(); public abstract double volume(); static double sumofArea(Container c[]){ double sum1 = 0; for(int i = 0;i<c.length;i++) sum1 = sum1 + c[i].area(); return sum1; } static double sumofVolume(Container c[]){ double sum2 = 0; for(int i =0;i<c.length;i++) sum2 = sum2 + c[i].volume(); return sum2; } } class Cube extends Container{ private double lengths; public void setlength(double lengths){ this.lengths = lengths; } @Override public double area() { return lengths*lengths*6; } @Override public double volume() { return lengths*lengths*lengths; } } class Cylinder extends Container{ private double r; private double high; public void setlength(double r,double high){ this.r = r; this.high = high; } @Override public double area() { return pi*r*r*2+2*pi*r*high; } @Override public double volume() { return pi*r*r*high; } } public class Main { public static void main(String[] args) { int time; Scanner in=new Scanner(System.in); time = in.nextInt(); Container c[] = new Container[time]; int i = 0; while(time>0){ String a; a = in.next(); if(a.equals("cube")){ Cube cube = new Cube(); c[i] = cube; double lengths = in.nextDouble(); cube.setlength(lengths); } if(a.equals("cylinder")){ Cylinder cylinder = new Cylinder(); c[i] = cylinder; double r = in.nextDouble(); double high = in.nextDouble(); cylinder.setlength(r,high); } i++; time--; } double sumofarea = c[0].sumofArea(c); double sumofvolume = c[0].sumofVolume(c); System.out.println(String.format("%.2f",sumofarea)); System.out.println(String.format("%.2f",sumofvolume)); } }
本题难点主要体现在对
定义容器Container接口。模拟实现一个容器类层次结构,并进行接口的实现、抽象方法重写和多态机制测试。各容器类实现求表面积、体积的方法。
-
定义接口Container:
属性:
public static final double pi=3.1415926;
抽象方法:
public abstract double area();
public abstract double volume();
static double sumofArea(Container c[]);
static double sumofVolume(Container c[]);
其中两个静态方法分别计算返回容器数组中所有对象的面积之和、周长之和;
-
定义Cube类、Cylinder类均实现自Container接口。
Cube类(属性:边长double类型)、Cylinder类(属性:底圆半径、高,double类型)。
代码分析:1.输入判断:
- 1、第一行n表示对象个数,对象类型用cube、cylinder区分,cube表示立方体对象,后面输入边长,输入cylinder表示圆柱体对象,后面是底圆半径、高。
2.数据处理:
-
将所输入数据转到相应类里,进行计算。
-
-
分别输出所有容器对象的表面积之和、体积之和,结果保留小数点后2位。
PTA大作业七
7-2 sdut-Collection-sort--C~K的班级(II)
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); int i, n,j; n = in.nextInt(); String a = in.nextLine(); ArrayList<String> list = new ArrayList<String>(); while(n > 0) { n--; a = in.nextLine(); if(list.contains(a)) { continue; } else { list.add(a); } } System.out.println(list.size()); String []str1 = new String[list.size()]; list.toArray(str1); for(i = 0;i<str1.length;i++){ for(j = str1.length-1;j>i;j--){ if(str1[j].compareTo(str1[j-1])<0){ a = str1[j]; str1[j] = str1[j-1]; str1[j-1] = a; } } } for(String k:str1) System.out.println(k); } }
- 本题难点主要体现在对发现会有同学的信息重复,现在他想把重复的同学信息删掉,只保留一个,
但是工作量太大了。 代码分析:1.输入判断:
- 第一行输入一个N,代表C~K导出的名单共有N行(N<100000).接下来的N行,每一行包括一个同学的信息,学号 姓名 年龄 性别。
2.数据处理:
- 将所输入数据转到相应集合里,进行删减排序。
- 第一行输出一个n,代表删除重复名字后C~K的班级共有几人。接下来的n行,输出每一个同学的信息,输出按照学号从小到大的顺序。
7-3 阅读程序,按照题目需求修改程序
1 import java.util.Iterator; // 引入 Iterator 类 2 import java.util.Scanner; 3 import java.util.Collection; 4 import java.util.ArrayList; 5 // 1、导入相关包 6 7 //定义员工类 8 class Employee { 9 10 private String name; 11 private int age; 12 13 public Employee() { 14 super(); 15 } 16 17 public Employee(String name, int age) { 18 super(); 19 this.name = name; 20 this.age = age; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 public int getAge() { 32 return age; 33 } 34 35 public void setAge(int age) { 36 this.age = age; 37 } 38 } 39 40 //主函数 41 public class Main { 42 43 public static void main(String[] args) { 44 // 1、创建有序集合对象 45 Collection c = new ArrayList(); 46 47 // 创建3个员工元素对象 48 for (int i = 0; i < 3; i++) { 49 Scanner sc = new Scanner(System.in); 50 String employeeName = sc.nextLine(); 51 int employeeAge = sc.nextInt(); 52 53 Employee employee = new Employee(employeeName, employeeAge); 54 c.add(employee); 55 } 56 57 58 59 // 2、创建迭代器遍历集合 60 Iterator it = c.iterator(); 61 62 //3、遍历 63 while (it.hasNext()) { 64 65 //4、集合中对象未知,向下转型 66 Employee e = (Employee)it.next(); 67 68 System.out.println(e.getName() + "---" + e.getAge()); 69 } 70 } 71 72 }
本题难点主要体现使用集合存储3个员工的信息(有序); 通过迭代器依次找出所有的员工。
代码分析:主要是迭代器的使用
3.踩坑心得:
1.对输入的判断一定要谨慎,尤其是最后一次的三道题目,一开始我都是拿不到满分,后来发现多多少少都有受到输入的影响!尤其是第一道题,输入判断不只是对" " , "," , "+"此三个符号的判断还有很容易忽略的".",所以发现了此问题后我就加上了一段新代码。
2.电话计费基本一路磕磕绊绊,正则表达式的不够熟练导致输入判断很难。
class CallRecord extends CommunicationRecord {//具体的某一通话记录类 private Date StartTime; private Date endTime; private String callingAddressAreaCode; private String answerAddressAreaCode; public Date getStartTime() { return StartTime; } public void setStartTime(Date startTime) { StartTime = startTime; } public Date getEndTime() { return endTime; } public void setEndTime(Date endTime) { this.endTime = endTime; } public String getCallingAddressAreaCode() { return callingAddressAreaCode; } public void setCallingAddressAreaCode(String callingAddressAreaCode) { this.callingAddressAreaCode = callingAddressAreaCode; } public String getAnswerAddressAreaCode() { return answerAddressAreaCode; } public void setAnswerAddressAreaCode(String answerAddressAreaCode) { this.answerAddressAreaCode = answerAddressAreaCode; } } abstract class ChargeMode {//计费规则的合计 private ArrayList<ChargeRule> chargeRules = new ArrayList<ChargeRule>(); public ArrayList<ChargeRule> getChargeRules() { return chargeRules; } public void setChargeRules(ArrayList<ChargeRule> chargeRules) { this.chargeRules = chargeRules; } public double calCost(UserRecords userRecords){ return 1; } public double getMonthlyRen(){ return 1; } } abstract class ChargeRule { public double calCost(ArrayList<CallRecord> callRecords){ return 1; } }
3.集合的运用不够到位,很多地方如果使用迭代器去遍历整个集合或者是接口进行比较会简单很多!!!
class UserRecords { private ArrayList<CallRecord> callingInCityRecords = new ArrayList<CallRecord>(); private ArrayList<CallRecord> callingInProvinceRecords = new ArrayList<CallRecord>(); private ArrayList<CallRecord> callingInLandRecords = new ArrayList<CallRecord>(); private ArrayList<CallRecord> answerInCityRecords = new ArrayList<CallRecord>(); private ArrayList<CallRecord> answerInProvinceRecords = new ArrayList<CallRecord>(); private ArrayList<CallRecord> answerInLandRecords = new ArrayList<CallRecord>(); private ArrayList<MessageRecord> sendMessageRecords = new ArrayList<MessageRecord>(); private ArrayList<MessageRecord> receiveMessageRecords = new ArrayList<MessageRecord>(); public ArrayList<MessageRecord> getSendMessageRecords() { return sendMessageRecords; } public ArrayList<MessageRecord> getReceiveMessageRecords() { return receiveMessageRecords; } public ArrayList<CallRecord> getCallingInCityRecords() { return callingInCityRecords; } public ArrayList<CallRecord> getCallingInProvinceRecords() { return callingInProvinceRecords; } public ArrayList<CallRecord> getCallingInLandRecords() { return callingInLandRecords; } public ArrayList<CallRecord> getAnswerInCityRecords() { return answerInCityRecords; } public ArrayList<CallRecord> getAnswerInProvinceRecords() { return answerInProvinceRecords; } public ArrayList<CallRecord> getAnswerInLandRecords() { return answerInLandRecords; } public void addCallingInCityRecords(CallRecord callRecord) { callingInCityRecords.add(callRecord); } public void addCallingInProvinceRecords(CallRecord callRecord) { callingInProvinceRecords.add(callRecord); } public void addCallingInLandRecords(CallRecord callRecord) { callingInLandRecords.add(callRecord); } public void addAnswerInCityRecords(CallRecord callRecord) { answerInCityRecords.add(callRecord); } public void addAnswerInProvinceRecords(CallRecord callRecord) { answerInProvinceRecords.add(callRecord); } public void addAnswerInLandRecords(CallRecord callRecord) { answerInLandRecords.add(callRecord); } public void addSendMessageRecords(CallRecord callRecord) { } public void addReceiveMessageRecords(CallRecord callRecord) { } public void addSendMessageRecords(MessageRecord messageRecord) { sendMessageRecords.add(messageRecord); } public void addReceiveMessageRecords(MessageRecord messageRecord) { receiveMessageRecords.add(messageRecord); } }
4.改进建议:4.改进建议:
- 整体代码的可读性需加强有很多地方重复性太高。
2.对大作业2的7-2题,代码缩进不行,可读性差。
}
}
for(int n=0;n<time;n++){
output(arr[n],n+1);
}
}
}
}
}
3.大作业三的7-1题目,判断条件重复性太高,而且逻辑性不够清晰。
4.大作业三的7-2题目,整体运用的方法多,但是很多方法的内部也可以简化出别的方法。
5.大作业三的7-3题目,整体困难导致几种情况想不出来,而且整体对数学函数的运用和思路都需要大大提升。
代码的继承和类的设计。
1 import java.util.Scanner; 2 3 public class Main{ 4 public static void main(String []args) { 5 Scanner in =new Scanner(System.in); 6 String name; 7 String key; 8 int balance; 9 10 name = in.next(); 11 key = in.next(); 12 BankBusiness account = new BankBusiness(name,key); 13 14 key = in.next(); 15 balance = in.nextInt(); 16 account.deposit(key,balance); 17 18 key = in.next(); 19 balance = in.nextInt(); 20 account.withdrawal(key,balance); 21 22 key = in.next(); 23 balance = in.nextInt(); 24 account.withdrawal(key,balance); 25 26 key = in.next(); 27 balance = in.nextInt(); 28 account.withdrawal(key,balance); 29 30 account.end(); 31 } 32 }
5.总结:
本阶段三次题目集让我学到了基本的循环语句以及选择语言,尤其是更加熟练的运用字符串和字符串有关函数等等并让我更加熟练掌握了方法的运用和类的运用还有数学函数的运用等。对于类的运用和字符串以及数组等级基本类型的运用还需加强,尤其是一些基本语法。对整体的题目程序涉及方面还需加强,有很多地方可以简化运算和代码。对于java抽象及继承等方方面面还需加强尤其是有关于集合框架的部分,集合框架十分不熟练需要加强而且对于集合等等类的运用很差很多函数不知道如何使用以及很多地方如果使用了接口和迭代器的话会让代码简单很多但是仍需改进,尤其是电话计费的题目正则表达式的运用还需加强以及拓展,前期因为没有正则表达式的导致输入判断十分复杂而且不好用,容错率很低。代码的书写过程也需加强,很多题目的总体代码都存在重复性过高,可读性不强等问题。对方法的运用还需加强,熟练方法后可以增加代码可读性也能使代码更简单。
作业的测试点可以增加多一些提示,譬如有些模糊不清的输入判断如果增加一些提示将会更好。整体题目的难度,就是第一次第二次比较简单,突然第三次特别难,我觉得可以第三次也有一些难题,但是也可以增加两道简单题有循序渐进的过程,电话计费也太难了,而且很容易0分希望可以改进一下一道题不需要一定是全是难得地方可以有一些简单的地方让我们得到一些基础的基本的分数。
dep_id

浙公网安备 33010602011771号