首页 > 其他分享 >第一次OOPBlog

第一次OOPBlog

时间:2024-04-20 23:25:44浏览次数:24  
标签:OOPBlog return String int price 第一次 private public

PTA也写过了三次作业了,虽然很遗憾都没有拿到满分,
不过在练习的过程中也很直观的学到了一点:做题不能因为不会就轻易放弃,要学会钻研。
借着这次机会,好好的和之前的自己“算个帐”。
首先是第一次作业中
1.涉及到了对象的包装,即面向对象的程序的三大技术之一,如:
设计一个风扇类:

点击查看代码
class Fan{
```        final int SLOW = 1;
          final int MEDIUM = 2;
          final int FAST = 3;
          private int speed = SLOW;
          private boolean on = false;
          private double radius = 5;//半径
          private String color = "white";
		  public int getSpeed(){
  			return speed;
  		}
  		public void setSpeed(int speed) {
  			this.speed = speed;
  		}
  		public boolean isOn(){
  			return on;
  		}
  		public void setOn(boolean on) {
  			this.on = on;
  		}
  		public double getRadius() {
  			return radius;
  		}
  		public void setRadius(double radius) {
  			this.radius = radius;
  		}
  		public String getColor() {
  			return color;
  		}
  		public void setColor(String color) {
  			this.color = color;
  		}
          public Fan(int fanSpeed,boolean fanOn,double fanRadius,String fanColor){
              speed = fanSpeed;
              on = fanOn;
              radius = fanRadius;
              color = fanColor;
          }
          public Fan(){
              
          }
          public String toString(){
              if(on)
                  return "-------\nMy Fan\n-------\nspeed "+speed+"\ncolor "+color+"\nradius "+radius+"\nfan is on";
              else 
                  return "-------\nMy Fan\n-------\nspeed "+speed+"\ncolor "+color+"\nradius "+radius+"\nfan is off";
          }
      }
对一个类进行包装,则要注意准确判断该类的:
  • 1.属性,
  • 2.方法。

使得该类与其他的类之间的交互变得顺畅方便

2.解析字符串:
在第一次作业的最后一题中,我们需要对其中的数据进行提取与解析:


像这里,面对这样有规律模板的字符串,在我还没接触正则表达式时,
我选择的是用字符串切割来进行提取信息:

点击查看代码
Topic b[] = new Topic[size];//存size个题目和标准答案;
        String str = "";
        str = scanf.nextLine();//吸收size后的回车
        String topic = "";//装题目
        String answer = "";//装答案
        int num=0,start = 0,start1 = 0;
        int f=1;
        for(int i=0;i<size;i++)
        {
            str = scanf.nextLine();//读取一整行
            start = str.indexOf("#A");//第一个“#A”位置
            start1 = str.indexOf("#Q");//#Q的位置
            num = Integer.valueOf(str.substring(3,start1).trim());
            //System.out.println(num);
            topic = str.substring(start1+3,start);
            topic = topic.trim();
            answer = str.substring(start+3);
            b[num-1] = new Topic(num,topic,answer);
        }

利用Java.lang.String类里的的substringindexOf方法,可以方便的对字符串找到标志切割点,进行切割,提取。

不过,在后期的学习中我们又学到了正则表达式这一利器,可以方便的分割字符串,
也在后期的尝试下,重新做对了这道题,所以说,一切恐惧都源于火力不足,在今后应该注重课外的学习,不仅仅是在意作业。


这是用正则表达式的分割方法:

点击查看代码
            String restr1 = " *#N: *(\\d\\d*) *#Q: *(.*)#A: *(.*)";
	        String restr2 = " *#A: *([^ A#:]*)";
	        int num = scanf.nextInt();//题目数量
	        String str = scanf.nextLine();//吸收回车
	        Pattern pattern;
	        Matcher matcher;
	        ArrayList<Topic> topics = new ArrayList<Topic>();//题目集
	        ArrayList<Answer> answers = new ArrayList<Answer>();
	        for(int i=0;i<num;i++)
	        {
                str = scanf.nextLine();
	        	if(str.contains("#N"))
	        	{
	        		pattern = Pattern.compile(restr1);
	        		matcher = pattern.matcher(str);
	        		if(matcher.find())
	        		{
	        			topics.add(new Topic(Integer.parseInt(matcher.group(1)),matcher.group(2).trim(),matcher.group(3).trim()));
	        		}
	        		continue;
	        	}
            }

在第二次作业中:

1.第一题是绝对值得一讲的:
在第一题中

要求编写一个类,手机类,且要实现Comparable接口,重写compareTo方法
在前期的学习中,我们知道,在String这个类中有着一个比较字符串的方法:compareTo()
实际操作中,我们自己定义的类,要实现重写这个方法,首先就是要用
implements Comparable<ClassName>语句实现Comparable接口,这样,我们所定义的类就可以有compareTo方法,然后再对该方法进行重写:

点击查看代码
class MobilePhone implements Comparable<MobilePhone>{
    private String type;
    private int price;
    public MobilePhone(String type,int price)
    {
        this.type = type;
        this.price = price;
    }
    public int compareTo(MobilePhone other)
    {
        return this.price-other.price;
    }
    public String typeGet()
    {
        return type;
    }
    public void typeSet(String type)
    {
        this.type = type;
    }
    public int priceGet()
    {
        return price;
    }
    public void priceSet(int price)
    {
        this.price = price;
    }
    public String toString()
    {
        return "型号:"+type+",价格:"+price;
    }
}

compareTo返回的是int类型的值,像这样在MobilePhone 里重写compareTo后,就可以用于比较两个MobilePhone 对象的大小了

当然,之后也可以根据需要,使用 Collections.sort(ListName)方法对数组或链表进行从小到大的排序;
2.对构造方法学习:


可以如图一样,一个类的构造方法可以进行重载,不过需要值得一提的是:在未显示给出构造方法的时候,系统会自动给出一个无参的构造方法,当显示给出构造方法时,则不会自动给出无参的构造方法。

在多数情况下,我们还是需要自己根据需要来自己创建构造方法,所以,对构造方法的熟悉是很重要的。

构造方法的特点:

  • 无返回类型;
  • 名字必须与类名同名;
  • 可以利用重载;

3.判题系统-2:
判题系统果然有一就有二;
在这次的判题系统中,相较于上次,不同的是,增加了试卷这一类,类的不断增加,对其内部的关系的理清也会变得有所复杂,


吸取上次的教训,我们知道面对这里,我们可以使用正则表达式来对付这种有规定格式的题目。
上代码:


通过类似的正则表达式,同样可以对其他两个数据:题目,答卷,进行数据解析。
这里学到了一个习惯,对付这样的规律模板,可以提前预写好每个正则表达式如:

前提是正则表达式得写对,遇到最多的情况就是,对空格的匹配错误,这方面还得多写,通过多写代码提高肌肉记忆。
判题系统2,除二次加深了对正则表达式的印象外,就是加强了对对象间的关联关系的掌握


在第三次作业中
1.初次使用了日期类:


在这里我用的本来是Calendar日历类:

但是有个弊端让我放弃了使用calendar的念想,就是,当输入的日期不合理时,它会自动的调成合理的,
例如:输入:2月30号,则会保存为3月1号,对日期的非法性判断起迷惑,所以后来就自己定义了一个类似于calendar的类,

点击查看代码
class Time implements Comparable<Time>{
    private int year;
    private int mon;
    private int day;
    private int week;
	public int getYear() {
		return year;
	}
	public int getMon() {
		return mon;
	}
	public int getDay() {
		return day;
	}
    public int getWeek(){
        return week;
    }
    public Time(){
        
    }
	public Time(int year, int mon, int day) {
		this.year = year;
		this.mon = mon;
		this.day = day;
        this.week = toWeek(year,mon,day)%7;
        if(week==0) 
            week = 7;
	}
    public static int toWeek(int year,int mon,int day)//1940的1月1号为星期一
    {
        //假如year==1941 1月1日
        int s = 0;
        for(int i=1940;i<year;i++)
        {
            if(Main.isLeap(i))
                s+=366;
            else
                s+=365;
        }
        s+=Main.dayOfYear(year,mon,day);
        return s;
    }
    public int compareTo(Time other)
    {
        if(other.year>this.year)
            return -1;
        else if(other.year<this.year)
            return 1;
        else{
            if(other.mon>this.mon)
                return -1;
            else if(other.mon<this.mon)
                return 1;
            else{
                if(other.day>this.day)
                    return -1;
                else if(other.day<this.day)
                    return 1;
                else
                    return 0;
            }
        }
    }
}

不过,calendar日历类确实很方便,可以得到星期几,还可以得到年月日等,不过,需要注意的是,calendar记录的是西方日期,所以DAY_OF_WEEK返回的星期还应该-1使用,MONTH返回的月份应该+1使用
2.针对第三次判题系统我们来讲讲:

即使最后的最后也没做出来,虽然嘴上说不在意,但其实还是想解决它的;
对于第三次作业,与前面两次相比,可谓是天壤之别:

  • 1.在原有关系上,增加了两种的信息:删除和学生信息;
  • 2.在原有基础上,增加了判错;
  • 3.增加了答卷的可变性,答卷可以不按套路出牌,但是我们依旧得识别出;

1.第一点来说,首先就是实现正则表达式的书写:

不过对题目而言,我们应该重新定义一个属性:来表示题目是否存在:

再加个学生类Stu


2.增加了判错,这里我们防止漏判,多判,我们用到了String自带的两个方法:spiltmatches
直接看代码:


利用spilt将str有规律的分割,再用matches对其一一检查,好处是:不用过多的考虑空格以及字符串结束带来的种种困扰,可以有效的判错,因此在判错上也拿了满分。

3.虽然错了,不过通过课上讲解得知:可以利用HashMap将输入的乱序答案和正序题目联系在一起。
再通过HashMap自带的get(key)方法将对应题号的答案找出来,再进行判错和打分。

以上就是对本次PTA前三次作业的总结。
对于今后,我也要不断的努力,但是,就当是我对自己说的,
“不要看到别人做到,自己没做到,就觉得自己不行了”,
“不要以为自己这次想破脑汁也没做到满分,就下次想多了也没用,试试,试过就算赢了,希望自己下次走出来,不要害怕当下的题目。下次可能就能做出来啦”

标签:OOPBlog,return,String,int,price,第一次,private,public
From: https://www.cnblogs.com/wdhxsrs0207/p/18147568

相关文章

  • OOP课程第一次博客
    目录1.前言2.设计与分析1.第一次pta作业2.第二次pta作业3.第三次pta作业3.踩坑心得4.改进建议5.总结1.前言前三次pta题目集的最后一题主要是实现一个模拟小型测试的答题判题程序,第二次题目集在第一次的基础上新增了一个答卷类,第三次题目集在第二次题目集上新增了一个学生类并且......
  • 4.18第一次冲刺
    晨会1.人员:袁兴兰、齐飞跃、王瑞2.会议讨论袁兴兰:1.今天打算完成寻找免费api,完成博客的整理齐飞跃:1.今天打算学习调用第三方库或第三方api王瑞:1.今天打算画出安卓前端页面2.遇到的问题:调用摄像头报错,版本不兼容3.任务看板 4.合照 ......
  • oop第一次博客
    一:关于java和面向对象程序设计对于java我是比较陌生的,上学期只学了一门C语言,所以java的语法比较陌生,但是经过一段时间的练习,语法上变得稍微熟练二:关于此次pta作业题目是关于判题程序的关于知识点:1.此次pta使用了正则表达式匹配2.需要保证类的单一职责原则关于题量:1.前两次......
  • 第一次实验
    一、原型工具优缺点对比墨刀、Axure、Mockplus都是常见的原型设计工具,它们在适用领域和优缺点上有着各自的特点:墨刀:适用领域:墨刀适用于快速原型设计和团队协作。它的界面简洁易用,支持多种交互和动画效果,适合用于移动应用和网页的设计。优点:简单易上手,无需编码经验;提供丰富的交......
  • 软件工程基础——第一次实验
    一.原型工具优缺点对比1.墨刀适用领域:墨刀适用于快速原型设计和团队协作。它的界面简洁易用,支持多种交互和动画效果,适合用于移动应用和网页的设计。墨刀是一款在线原型设计与协同工具,借助墨刀,产品经理、设计师、开发、销售、运营及创业者等用户群体,能够搭建为产品原型,演示项目......
  • 第一次自己独立做项目,沃连汇建站总结
    作为一名半路出家的野生程序员,我一直对建站有着浓厚的兴趣。这不仅是一个技术挑战,也是一个创造性的过程。在这篇总结中,我将分享我从零开始建设沃连汇网站的经历,包括规划、设计、开发到部署的全过程。一、规划阶段建站的第一步是规划。定位就是一个知识分享博客,用来分享我的编程......
  • Mockito测试框架结合mybatisplus项目中第一次体验
    因为要补充单测,一般的springbootTest不是真正意义上的单测。我们需要mock数据库的连接,而不是真正的调用。所以我觉得mockito测试框架就挺好的pom引入如下代码,这里用inline是因为我要用到静态方法的调用。<dependency><groupId>org.mockito</groupId>......
  • Java后端新手的第一次面试复盘
    昨天经历了第一次Java后端实习生面试,在无数次的简历投递后,很难得的一次面试机会,收获很多,也深刻感受到自己能力的不足(还需要继续沉淀半个学期),在此记录下收获和感悟,如有错误,欢迎指正!1.面试流程闲聊(5分钟):自我介绍+询问背景动机技术问答(45分钟):包括Java基础、数据库技......
  • 第二期书生浦语大模型实战营第一次作业(大模型技术报告解读)
    书生·浦语大模型全链路开源体系上海人工智能实验室与商汤科技联合香港中文大学、复旦大学发布新一代大语言模型书生·浦语2.0(InternLM2)。这个大模型包含70亿和200亿两种参数规格,以及基座、对话等版本,向全社会开源并提供免费商用授权。书生·浦语2.0(英文名:InternLM2)核心理念:......
  • Android 12 第一次运行就报错,Android面试题集锦在这里
    以前加上intent-filter的话,exported就默认是true。Android 12之后开始强制大家声明exported属性**。**例如:<application<activityandroid:name=“.actvitiy.MainActivity”android:exported=“true”<activityandroid:name=“.actvitiy.SchemeActivity”android:e......