首页 > 编程语言 >PTA--《面向对象程序设计》

PTA--《面向对象程序设计》

时间:2024-06-07 12:58:15浏览次数:29  
标签:name -- age PTA 面向对象 int sc public String

目录

 一:超市贴花

二:教师类

三:快递计价器

四:重复数据问题

五:List的使用


 一:超市贴花

某超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。

输入样例:

6
3 2 4 6 6 4

输出样例:

1

2 3 4是一个组合,之后剩下的4 6 6不是连续的编号 

答案代码:

package com.lcyy;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author: dlwlrma
 * @data 2024年06月04日 22:17
 * @Description: TODO:某超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,
 *                    种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。
 */
public class Main7 {
    public static void main(String[] args) {
        //用来计数
        int temp = 0;
        Scanner sc = new Scanner(System.in);
        //输入第一个值
        int n = sc.nextInt();
        int[] a = new int[n];

        for (int i = 0; i < a.length; i++) {
            //存放要放入的数据,此时元素时无序的,可以进行排序
            a[i] = sc.nextInt();
        }
        //排序
        Arrays.sort(a);

        for (int i = 0; i < a.length-2;) {
            if((a[i]!=0)&&(a[i]+1==a[i+1])&&(a[i+1]==a[i+2])){
                temp++;
                //连续三次所以要+3
                i+=3;
            }else {
                //不是三次,向后移一位
                i++;
            }
        }
        //输出temp即可
        System.out.println(temp);
    }
}

二:教师类

设计一个教师类Teacher,要求:
属性有编号(int no)、姓名(String name)、年龄(int age)、所属学院(String seminary),为这些属性设置相应的get和set方法。
为Teacher类重写equals方法,要求:当两个教师对象的no相同时返回true。
重写Teacher类的toString方法,通过该方法可以返回“no: , name:, age: **, seminary: **”形式的字符串

输入样例:

1 Linda 38 SoftwareEngineering
2 Mindy 27 ComputerScience

输出样例:

no: 1, name:Linda, age: 38, seminary: SoftwareEngineering
no: 2, name:Mindy, age: 27, seminary: ComputerScience
false 

答案测试代码:

import java.util.Objects;
import java.util.Scanner;

//设计一个教师类Teacher,要求:
//属性有编号(int no)、姓名(String name)、年龄(int age)、所属学院(String seminary),为这些属性设置相应的get和set方法。
//为Teacher类重写equals方法,要求:当两个教师对象的no相同时返回true。
//重写Teacher类的toString方法,通过该方法可以返回“no: , name:, age: **, seminary: **”形式的字符串。
class Teacher{
    private int no;
    private String name;
    private int age;
    private String seminarry;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Teacher teacher = (Teacher) o;
        return no == teacher.no;
    }

    @Override
    public int hashCode() {

        return Objects.hash(no);
    }

    @Override
    public String toString() {
        return ("no: "+no+", name:"+name+", age: "+age+", seminary: "+seminarry);
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSeminarry() {
        return seminarry;
}

public void setSeminarry(String seminarry) {
        this.seminarry = seminarry;
    }

class Main{
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        Teacher teacher = new Teacher();
        teacher.setNo(sc.nextInt());
        teacher.setName(sc.next());
        teacher.setAge(sc.nextInt());
        teacher.setSeminarry(sc.next());

        Teacher teacher1 = new Teacher();
        teacher1.setNo(sc.nextInt());
        teacher1.setName(sc.next());
        teacher1.setAge(sc.nextInt());
        teacher1.setSeminarry(sc.next());
        System.out.println(teacher.toString());
        System.out.println(teacher1.toString());
        System.out.println(teacher.equals(teacher1));

    }
}

三:快递计价器

现需要编写一个简易快递计价程序。具体来说:

1、抽象快递类Express,其包含一个属性int weight表示快递重量(单位为kg),一个方法getWeight()用于返回快递重量和一个抽象方法getTotal()用于计算快递运费。

2、两个类继承Express,分别是:
(a)顺路快递SLExpress:计价规则为首重(1kg)12元,每增加1kg费用加2元。
(b)地地快递DDExpress:计价规则为首重(1kg)5元,每增加1kg费用加1元。

3、Main:
接收用户通过控制台输入的N行信息,自动计算所有快递的运费总和。

输入样例:

6
SL 2
DD 2
SL 1
SL 1
SL 1
DD 3

第1行n表示需要计算的快递件数
第2至n+1表示每个快递信息,即选哪家快递公司 以及快递的重量(单位kg)

输出样例:

63 

答案代码:

package com.lcyy;

import java.util.Scanner;

/**
 * @author: dlwlrma
 * @data 2024年06月04日 22:33
 * @Description: TODO:现需要编写一个简易快递计价程序。具体来说:
 *                    1、抽象快递类Express,其包含一个属性int weight表示快递重量(单位为kg),一个方法getWeight()用于返回快递重量
 *                    一个抽象方法getTotal()用于计算快递运费。
 *                    2、两个类继承Express,分别是:
 *                   (a)顺路快递SLExpress:计价规则为首重(1kg)12元,每增加1kg费用加2元。
 *                   (b)地地快递DDExpress:计价规则为首重(1kg)5元,每增加1kg费用加1元。
 */
//抽象快递类
abstract class Express{
    //快递重量
    int weight;
    //返回快递重量
    public int getWeight(){
        return weight;
    }
    //抽象方法(计算快递费)

    abstract int getTotal(int weight);
}

class SLExpress extends Express{

    @Override
    int getTotal(int weight) {
        int money = 12+(weight-1)*2;
        return money;
    }
}

class DDExpress extends Express{

    @Override
    int getTotal(int weight) {
        int money = 5+(weight-1)*1;
        return money;
    }
}

public class Main8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        //接受用户输入的物品数
        int n = sc.nextInt();
        String str1 = "SL";
        String str2 = "DD";
        //总钱数
        int sum =0;
        for (int i = 0; i <n; i++) {
            //创建两个用户

            SLExpress slExpress = new SLExpress();
            DDExpress ddExpress = new DDExpress();
            String str = sc.next();
            int a = sc.nextInt();
            if(str.equals(str1)){
              sum+=slExpress.getTotal(a);
            }else if(str.equals(str2)){
                sum+=ddExpress.getTotal(a);
            }
        }
        System.out.println();
        System.out.println("sum = " + sum);
    }
}

四:重复数据问题

在一大堆数据中找出重复的是一件经常要做的事情。现在要处理许多整数,在这些整数中,可能存在重复的数据。
你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“yes”这三个字母;如果没有,则输出“no”。

输入样例:

1 2 3 1 4

输出样例:

yes

答案代码:


import java.util.*;

/**
 * @author: dlwlrma
 * @data 2024年06月05日 16:27
 * @Description: TODO:解决数据冲突问题
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //创建set对象
        HashSet<Integer> hashSet = new HashSet<>();
        //创建一个布尔类型的标记
        boolean temp = false;

        while(sc.hasNext()){
            int n = sc.nextInt();
            if(hashSet.contains(n)){
                temp = true;
                break;
            }else {
                hashSet.add(n);
            }
        }

        if(temp){
            System.out.println("yes");
        }else {
            System.out.println("no");
        }
    }
}

五:List的使用

本题练习列表的使用。

定义Person类
定义私有属性String name,int age,使用Eclipse生成每个属性setter 、getter,有参Person(String name,int age) 、无参 构造方法,toString方法。
定义Main类,在main方法中
定义List list = new ArrayList();
用键盘给变量n赋值
生成n个Person对象并添加到列表中,该Person的name和age通过键盘给出
循环列表,输出列表所有Person对象信息(调用toString方法)
输入一个字符串表示姓名,判断该字符串表示的Person对象在List中是否存在,如果存在,输出该Person,否则输出此人不存在。

输入样例:

3
zhang 23
li 44
wang 33
li

------------------

3
zhang 23
li 44
wang 33
may

输出样例:

Person [name=zhang, age=23]
Person [name=li, age=44]
Person [name=wang, age=33]
Person [name=li, age=44]

----------------------------------------

Person [name=zhang, age=23]
Person [name=li, age=44]
Person [name=wang, age=33]
此人不存在 

答案代码:


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author: dlwlrma
 * @data 2024年06月05日 17:11
 * @Description: TODO:定义私有属性String name,int age
 *                   使用Eclipse生成每个属性setter 、getter,有参Person(String name,int age) 、无参 构造方法,toString方法。
 */
class Persion {
    private String name;
    private int age;

    public Persion(){}

    public Persion(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [" +
                "name=" + name +
                ", age=" + age +
                ']';
    }
}

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Persion> list = new ArrayList<>();
        //输入人数
        int number = sc.nextInt();
        for (int i = 0; i < number; i++) {
            Persion persion = new Persion();
            persion.setName(sc.next());
            persion.setAge(sc.nextInt());
            list.add(persion);
        }
        System.out.println();

        //遍历集合
        for (Persion ps : list) {
            //输出集合
            System.out.println(ps);
        }

        //查询
        boolean temp = false;
        String str = sc.next();
       for(Persion ps : list){
           if(ps.getName().equals(str)){
               System.out.println(ps);
               temp = true;
               break;
           }
       }
       if(!temp){
           System.out.println("此人不存在");
       }
    }
}

标签:name,--,age,PTA,面向对象,int,sc,public,String
From: https://blog.csdn.net/2301_76613040/article/details/139455368

相关文章

  • 禅道Zentao全家桶(安装|升级|卸载|备份|恢复)
    说明命令斟酌使用。安装禅道软件下载地址:http://www.zentao.net/download.html1、将安装包直接解压到/opt目录下特别说明:**不要**解压到别的目录再拷贝到/opt/,原因:会导致文件的所有者和读写权限改变,**不要**解压后把整个目录777权限。​可以使用命令:sudotar......
  • CF1979 记录
    Dashboard-CodeforcesRound951(Div.2)-Codeforces吐槽和简单总结感觉最近打一场比赛掉一次rating,可能前几次上涨都只是运气好碰到了一些更考验思维的题,我的细节能力就是依托答辩,什么也写不出来,这次B猜的结论(虽然细想很快就能找到证明),C也是猜的,D一直在绕弯,E一开始......
  • Python实现投递多线程任务
    使用Python的apscheduler库中的BackgroundScheduler实现投递多线程任务的示例代码。这个示例将展示如何根据任务ID投递和停止任务,设置任务同时执行的上限,以及删除全部任务。首先,确保你已经安装了apscheduler库:``pipinstallapscheduler``代码示例:``fromapscheduler.sched......
  • 面试必会 --> MyBatis篇
    什么是MyBatisMybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态sql,可以严格控制sql执行性能,灵活度高。MyBatis可以使用XML或注解来配置和映射......
  • H3C模拟延时测试ping包
    1.拓扑2.各路由器配置sysnameR1ospf1area0.0.0.0network10.0.12.00.0.0.255network10.0.13.00.0.0.255interfaceLoopBack0ipaddress1.1.1.1255.255.255.255ospf1area0.0.0.0interfaceGigabitEthernet0/0ipaddress10.0.12.1255.255.255.0......
  • Telephone Lines S
    [USACO08JAN]TelephoneLinesS题目描述FarmerJohnwantstosetupatelephonelineathisfarm.Unfortunately,thephonecompanyisuncooperative,soheneedstopayforsomeofthecablesrequiredtoconnecthisfarmtothephonesystem.ThereareN(1≤......
  • 【日记】遇到了一个很奇怪的大爷(845 字)
    正文花了昨天和今天两天时间,把数据转移完了。这块2T的硬盘可以光荣退休了。目前是没什么存储焦虑了。农发行净开发一些垃圾系统。今天没什么业务,但跟ActiveX斗智斗勇了一整天,最后实在搞不过IE浏览器。我也懒得管了,又不多挣一份工资。晚上去跳舞,才注意到老师......
  • 机器学习算法(一):1. numpy从零实现线性回归
    系列文章目录机器学习算法(一):1.numpy从零实现线性回归机器学习算法(一):2.线性回归之多项式回归(特征选取)@目录系列文章目录前言一、理论介绍二、代码实现1、导入库2、准备数据集3、定义预测函数(predict)4代价(损失)函数5计算参数梯度6批量梯度下降7训练8可视化一下损失总结前......
  • 代码随想录算法训练营第七天 | 四数之和、赎金信、三数之和、四数之和2
    代码随想录算法训练营第七天383赎金信https://leetcode.cn/problems/ransom-note/submissions/537782865/383赎金信代码随想录https://programmercarl.com/0383.赎金信.html#思路四数之和2https://leetcode.cn/problems/4sum-ii/四数之和2代码随想录https://programmerca......
  • C++ -- 引用
    什么是引用?引用其实就是一个变量的别名。也就是说,你可以通过引用的名称去访问原来的那个变量。其操作符很简单,就是在变量前面加上&。一个很简单的例子://variableinti;//referencevariablesint&r=i;i=5;cout<<"valueofiis:"<<i<<endl;......