每日练一练

使用列表管理个人信息

题目描述:

现在想要使用列表(ArrayList)来管理个人信息。

首先,输入字符串n-x-y。n代表所要处理的数据的数量,x代表姓,y代表名。

然后输入n个人的信息,每一行代表一个人的信息。每行字符串格式为"姓-名-成绩-编号",以-作为分隔符。

将所有姓为x的字符串放入数组列表list1中。然后,输出list1。

进一步地将list1中的名字为y(忽略大小写)的字符串取出放入list2中。然后,输出list2。

最后,对list2中的字符串按成绩进行降序排序并输出。

输入格式:

第一行输入n-x-y

下面输入n行字符串,格式为"姓-名-成绩-编号"

输出格式:

格式化输出的多个人的信息

输入样例:
8-zhang-san
zhang-san-99-1
li-si-70-2
zhang-San-65-3
zhang-fei-70-4
zhang-SAn-101-5
Li-si-99-6
li-SI-80-7
Zhang-san-56-8
输出样例:
[zhang-san-99-1, zhang-San-65-3, zhang-fei-70-4, zhang-SAn-101-5]
[zhang-san-99-1, zhang-San-65-3, zhang-SAn-101-5]
[zhang-SAn-101-5, zhang-san-99-1, zhang-San-65-3]
代码:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
​
public class Information {
​
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 提示用户输入数据
        System.out.println("请输入n-x-y。n代表所要处理的数据的数量,x代表姓,y代表名");
        // 读取用户输入
        String str = sc.next();
        // 将输入字符串分割成字符串数组
        String[] str_num = str.split("-");
        // 创建两个列表以存储数据
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
​
        // 将数组中的第一个字符串转换为整数
        int n = Integer.parseInt(str_num[0]);
        // 遍历输入数据
        for (int i = 0; i < n; i++) {
            String student = sc.next();
            // 将每个学生的数据分割成字符串数组
            String[] student_01 = student.split("-");
            // 检查学生的姓是否与用户输入匹配
            if (student_01[0].equals(str_num[1])) {
                // 将学生的数据添加到第一个列表中
                list1.add(student);
            }
        }
        // 打印出第一个列表
        System.out.println(list1);
​
        // 遍历第一个列表
        for (String s : list1) {
            // 检查学生的名是否与用户输入匹配
            if (s.split("-")[1].equalsIgnoreCase(str_num[2])) {
                // 将学生的数据添加到第二个列表中
                list2.add(s);
            }
        }
​
        // 在排序之前打印出第二个列表
​

选修课成绩统计问题

题目描述:

学生选修课成绩统计问题

选修课格次成绩使用字母表示,规则为:A=5,B=4,C=3,D=2,E=1

编写程序统计每个同学两门选修课的分数成绩

输入格式:多个学生的格次成绩使用西文逗号分开,整理为一行;每个学生姓名在前面,格次成绩在后,之间均使用空格分开

数据统计:将每个学生的两门课格次成绩,转换为分数成绩并求和

输出格式:结果为一行,姓名在前总分在后,之间空格分开;不同学生的记录之间使用西文逗号分开,注意最后的记录末尾没有逗号

输入格式:

多个学生的格次成绩使用西文逗号分开,整理为一行;每个学生姓名在前面,成绩在后,之间均使用空格分开

输出格式:

结果为一行,姓名在前总分在后,之间空格分开;不同学生的记录之间使用西文逗号分开,注意最后的记录末尾没有逗号

输入样例:

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

zs A B,ls A C,ww B C

输出样例:

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

zs 9,ls 8,ww 7

代码
import java.util.*;
​
public class Score {
    public static void main(String[] args) {
        // 定义成绩等级对应的分数
        // A=5,B=4,C=3,D=2,E=1
        Scanner sc = new Scanner(System.in);
        // 读取输入的字符串
        String str = sc.nextLine();
        // 将字符串按逗号分割成字符串数组
        String[] str_per = str.split(",");
        // 创建一个列表以存储学生的姓名和总分
        List<String> list = new ArrayList<>();
        // 创建一个哈希表以存储成绩等级对应的分数
        Map<String,Integer> map = new HashMap<>();
        map.put("A", 5);
        map.put("B", 4);
        map.put("C", 3);
        map.put("D", 2);
        map.put("E", 1);
​
        int score = 0;
        // 遍历学生的成绩数据
        for (String a:str_per) {
            // 将每个学生的成绩数据按空格分割成字符串数组
            String[] s = a.split(" ");
            // 计算学生的总分
            score = map.get(s[1]) + map.get(s[2]);
            // 将学生的姓名和总分添加到列表中
            list.add(s[0] + " " + score);
        }
        // 打印出学生的姓名和总分列表
        System.out.println(list);
    }
}
​

学生信息的添加与查询(HashMap)

题目描述:

设计一个学生信息添加和查询的系统,从键盘读入学生的数据,然后通过屏幕进行显示。

输入格式:

第一行有1个整数N,表示学生数量;

接下来有N行学生数据,分别表示学生的id(编号)、name(姓名)、birthday(生日)、score(成绩)属性的值,关键字(id)相同的记录代表同一个学生(如果id相同,后来读入的学生信息会覆盖已有的学生信息)

输出格式:

按照id从小到大的顺序,输出所有学生的属性名称及属性值,其中score(成绩)保留1位有效数字,具体输出格式见输出样例。

提示:可以利用Student类的toString()方法来实现类对象属性的展示。

输入样例:
5
0001  Mike    1990-05-20  98.5
0002  John    1992-05-20  67
0003  Hill    1994-05-20  36.5
0004  Christ  1996-05-20  86.5
0001  Jack    1998-05-20  96
输出样例:
Student [id=0001, name=Jack, birthday=1998年05月20日, score=96.0]
Student [id=0002, name=John, birthday=1992年05月20日, score=67.0]
Student [id=0003, name=Hill, birthday=1994年05月20日, score=36.5]
Student [id=0004, name=Christ, birthday=1996年05月20日, score=86.5]
代码
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读取输入的整数
        int num = sc.nextInt();
        // 创建一个哈希表以存储学生的数据
        Map<String,Student> map = new HashMap<>();

        // 循环读取学生数据并添加到哈希表中
        for (int i = 0; i < num; i++) {
            Student student = new Student(sc.next(),sc.next(),sc.next(),sc.nextDouble());
            map.put(student.getId(), student);
        }

        // 创建一个根据键排序的哈希表
        Map<String,Student> sortedMap = new TreeMap<>(map);
        // 获取哈希表中的所有键值对并遍历输出学生数据
        Set<Map.Entry<String, Student>> entries = sortedMap.entrySet();
        for (Map.Entry<String, Student> entry:entries) {
            System.out.println(entry.getValue());
        }
    }
}

class Student{
    private String id;
    private String name;
    private String birthday;
    private Double score;

    public Student() {
    }

    public Student(String id, String name, String birthday, Double score) {
        this.id = id;
        this.name = name;
        this.birthday = birthday;
        this.score = score;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        // 将学生生日的年月日分别提取出来并拼接成指定格式的字符串
        return "student [" +
                "id=" + id + ", " + "name=" + name + ", "
                + "birthday=" + birthday.split("-")[0]+ "年" +
                birthday.split("-")[1] + "月" + birthday.split("-")[2] +
                "日" + ", score=" + score + ']';
    }
}

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值