栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

总结性Blog

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

总结性Blog

前言:

在10--16的阶段性学习中,主要是针对JAVA中继承和多态的应用,课后的题量相对来说较少,但是难度相对较大,而且得分难,一般来说每次作业三个题目,第一题的内容占80分,而后面两个题目加起来也只能得到20分的满分。

设计与分析:

我在本阶段碰到的第一题--“电信计费系列--1”中要求如下:

实现一个简单的电信计费程序:
假设南昌市电信分公司针对市内座机用户采用的计费方式:
月租20元,接电话免费,市内拨打电话0.1元/分钟,省内长途0.3元/分钟,国内长途拨打0.6元/分钟。不足一分钟按一分钟计。
南昌市的区号:0791,江西省内各地市区号包括:0790~0799以及0701。

输入格式:

输入信息包括两种类型
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”结束。
注意:
本题非法输入只做格式非法的判断,不做内容是否合理的判断(时间除外,否则无法计算),比如:
1、输入的所有通讯信息均认为是同一个月的通讯信息,不做日期是否在同一个月还是多个月的判定,直接将通讯费用累加,因此月租只计算一次。
2、记录中如果同一电话号码的多条通话记录时间出现重合,这种情况也不做判断,直接 计算每条记录的费用并累加。
3、用户区号不为南昌市的区号也作为正常用户处理。

输出格式:

根据输入的详细通讯信息,计算所有已开户的用户的当月费用(精确到小数点后2位,
单位元)。假设每个用户初始余额是100元。
每条通讯信息单独计费后累加,不是将所有时间累计后统一计费。
格式:号码+英文空格符+总的话费+英文空格符+余额
每个用户一行,用户之间按号码字符从小到大排序。

错误处理:
输入数据中出现的不符合格式要求的行一律忽略。

类图不过多展示。

输入样例:

在这里给出一组输入。例如:

u-079186300001 0
t-079186300001 058686330022 2022.1.3 10:00:25 2022.1.3 10:05:25
end

输出样例:

在这里给出相应的输出。例如:

079186300001 3.0 77.0

其余参考样例详见附件,未尽事宜以附件样例为准

我对题目的理解:

除去常规的输入之外,应该设计一个类专门用来存储区号信息以及做区号检测,还有一个类用来计费,如果没有专门的类用来存储区号,后续的题目系列调用就会出问题

如下是我第一次提交的代码:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

//2022.1.3 10:05:25
//u-079186300001 0
//t-079186300001 058686330022 2022.1.3 10:00:25

public class Main {
	public static void main(String[] args) throws ParseException {
		Scanner scanner = new Scanner(System.in);
//		String line = null ;
//		while(!"end".equals(line = scanner.nextLine())) {
		 String str1 = scanner.nextLine();//开户号
		 String str2 = scanner.next();//主叫
		 String str3 = scanner.next();//接听
		 String str4 = scanner.next();//第一个时间
		 String str5 = scanner.next();//第二个时间
		 String str6 = scanner.next();//第三个时间
		 String str7 = scanner.next();//第四个时间
		 String line = null ;
			while(!"end".equals(line = scanner.nextLine())) {
		 SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm:ss");
//		 String format = dateFormat.format(str4);
		 Date d1 = dateFormat.parse(str5);
		 Date d2 = dateFormat.parse(str7);
		 long d3 = d2.getTime() - d1.getTime();
		 long second1 = d3 / (1000);
		 int second2 = (int) second1; 
		 int b,c;
		 b = second2 / 60;
		 c = second2 % 60;
		 if(!(c==0))
			 b = b + 1;
		
		 if ("0791".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.1;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0790".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0792".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0793".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0794".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0795".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0796".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0797".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0798".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else if ("0799".equals(str3.substring(0, 4))) {
			 double d,e;
			 d = b*0.3;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
		 else {
			 double d,e;
			 d = b*0.6;
			 e = 80.0-d;
			 System.out.print(str2.substring(2) + " ");
			 System.out.print(d + " ");
			 System.out.print(e);
		 }
//		 System.out.println(str1 + " ");
//		 System.out.println(str1);
//		 System.out.printf(format);
//		 System.out.println(str1);
//		 System.out.print(str2 + " ");
//		 System.out.print(str3);
//		 System.out.print(str4 + " ");
//		 System.out.println(str5);
//		 System.out.print(second2);
//		 System.out.println(n);
	}
	}
}

这段代码的问题就在于没有设计类去解决数据存储以及调用,无法解耦,只是我第一次为了实现效果先在主类Main中的初稿。

踩坑心得:

首先遇到的遇到的第一个问题是输入的内容问题,首先我只用了5个String输入,我假设将后面两个日期时间是连在一起的,但是很快我就发现,由于PTA的输入是以空格来当跳符的,所以只能修改输入个数改为7个输入,第一个的类型是nextLine(),因为这里的输入里有一个回车的跳符,第二行就分为6个输入,分别对应每一个有空格的输入。

遇到的第二个问题是调用SimpleDateFormat时间类的格式问题,因为我的输入将日期和具体的日期分开了的,所以我只要将原本的"yyyy.MM.dd HH:mm:ss"格式改为“HH:mm:ss”,从我最后面的代码注释就看得出来在这里纠结了一会。

第三个问题是数据的存放问题,因为对应的区号并不是连串的,所以就可能要用到正则表达式去对区号进行匹配检测,否则就是我第一次提交的代码这样,繁重的工作量大大提升了代码的耦合性。

改进建议:

重新设计新的类,包括了新的数据存放数组和方法,节省代码空间。

多做继承应用之类的题目,不能第一时间反应出来总归到底是做的题目不够写的代码太少了。

总结:

用过本阶段的学习,增加了对继承和多态的理解,尤其是继承和接口的应用,在很多时候方便我们自己写代码而可以设计简单的类去进行调用。

对平时作业的建议是可能相对现在的我来说确实很赶,实验和作业一大堆,一般写JAVA都是晚上或者半夜,白天上课多,下午做实验,晚上又没什么精神,而且最难得是得分少,总共三个题目,后面两个虽说简单一些,但是写满分也才20分,第一个的占比太高了,而且有时候题目的跨度很大,一下子根本做不出来复杂的设计和代码实现,所以很难拿到平时分。

对教师和其他线上线下实验并无其他改进建议,老师还是很负责的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号