集合类型数据操作练习题

1. 集合A={1,2,3,4}B={1,3,5,7,9,11},编程求解两者的交集、并集和差集。

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main1 {
    public static void main(String[] args) {
        Set result = new HashSet<>();
        Set A = new HashSet<>();
        Set B = new HashSet<>();
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入集合A的数据量:");
        int sizeA = sc.nextInt();
        int num;
        System.out.println("请输入集合A的数据:");
        for (int i = 0; i < sizeA; i++) {
            System.out.println("请输入第" + (i+1) + "个数据");
            num = sc.nextInt();
            A.add(num);
        }

        System.out.println("请输入集合B的数据量:");
        int sizeB = sc.nextInt();
        System.out.println("请输入集合B的数据:");
        for (int i = 0; i < sizeB; i++) {
            System.out.println("请输入第" + (i+1) + "个数据");
            num = sc.nextInt();
            B.add(num);
        }

        result.addAll(A);
        result.retainAll(B);
        System.out.print("A和B的交集为:");
        System.out.println(result);

        result.addAll(A);
        result.addAll(B);
        System.out.print("A和B的并集为:");
        System.out.println(result);

        result.clear();
        result.addAll(A);
        result.removeAll(B);
        System.out.print("A和B的差集为:");
        System.out.println(result);
    }
}

 2. 小孩报数问题:有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。

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

public class Main2 {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        int n,w,s;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入有多少个小孩:");
        n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            list.add(i+1);
        }
        System.out.println("请指定从第几个小孩开始报数:");
        w = sc.nextInt();
        System.out.println("请指定报到第几个出列:");
        s = sc.nextInt();
        int i = w-1,k = 0,count = 0;
        while(count!=n){
            k++;
            if (k==s){
                System.out.print(list.get(i) + " ");
                list.remove(i);
                k = 0;
                count++;
                continue;
            }
            i++;
            i%=(list.size());
        }
    }
}

3 .信息学院年终评定奖学金,需要对整个年级的学生按照平均分数进行排名。

要求:根据输入的学号和平均成绩,按照平均成绩降序输出学号,如果平均成绩相同,按照输入的顺序输出。

 

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;

public class Main3 {
    public static void main(String[] args) {
        Set students = new TreeSet<Student>();
        int select = 1;
        Scanner sc = new Scanner(System.in);
        while (select==1) {
            System.out.println("请输学号:");
            String studentId = sc.next();
            System.out.println("请输入平均成绩:");
            double averageScore = sc.nextDouble();
            students.add(new Student(studentId,averageScore));
            System.out.println("是否继续进行添加学生的操作?");
            System.out.println("0======否");
            System.out.println("1======是");
            select = sc.nextInt();
        }
        System.out.println(students);
    }
}

class Student implements Comparable<Student>{
    private String studentId;
    private double averageScores;

    public Student() {
    }

    public Student(String studentId, double averageScores) {
        this.studentId = studentId;
        this.averageScores = averageScores;
    }

    @Override
    public int compareTo(Student o) {
        return this.averageScores - o.averageScores <= 0 ? 1 :-1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "studentId='" + studentId + '\'' +
                '}';
    }
}

 4、利用链表类及其顺序表类,完成一个学生成绩管理系统的设计

该题目要定义有关的类,定义类的方法和属性,再通过对象调用方法,完成所要求的功能。

     要求:

             完成一个学生管理信息系统,完成学生的各种管理。将文件中信息,读入,完成一下的各操作

     (1)添加一个新学生: (通过键盘输入该学生的各信息)

     (2)删除一个学生: (通过学号,删除学生信息)

     (3)修改一个学生的信息:(通过学号,修改学生的信息,要输入或提供该学生的有关信息)

     (4)查询一个学生并输出其有关信息:(通过学号,要查询学生,要输入或提供该学生的某项信息)

    (5)显示出所有学生的信息: (按表格格式显示:由表头,并且一个学生显示一行)

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

public class Main4 {
    public static void main(String[] args) {
        List<Student1> students = new ArrayList<>();
        while (true) {
            menu();
            Scanner sc = new Scanner(System.in);
            int select;
            select = sc.nextInt();
            switch (select){
                case 1:
                    Add(students,sc);
                    break;
                case 2:
                    Delete(students,sc);
                    break;
                case 3:
                    Modify(students,sc);
                    break;
                case 4:
                    Find(students,sc);
                    break;
                case 5:
                    PrintAllStudents(students);
                    break;
            }
        }
    }

    private static void PrintAllStudents(List<Student1> students) {
        //Student1 student = new Student1();
        for (Student1 student:students) {
            student.print();
        }
    }

    private static void Find(List<Student1> students, Scanner sc) {
        System.out.println("请输入学生学号:");
        String studentId = sc.next();
        int index = getIndexByStudentId(students,studentId);
        if (index!=1){
            students.get(index).print();
        }else {
            System.out.println("您查找的学生不存在!");
        }
    }

    private static void Modify(List<Student1> students, Scanner sc) {
        System.out.println("请输入学生学号:");
        String studentId = sc.next();
        int index = getIndexByStudentId(students,studentId);
        if (index!=-1){
            while (true){
                System.out.println("请选择你要修改的信息:");
                System.out.println("1、姓名");
                System.out.println("2、成绩");
                System.out.println("0、退出修改操作");
                int select = sc.nextInt();
                if (select==1){
                    System.out.println("请输入新的姓名:");
                    String newName = sc.next();
                    students.get(index).setName(newName);
                } else if (select==2) {
                    System.out.println("请输入新的成绩:");
                    double newScore = sc.nextDouble();
                    students.get(index).setScore(newScore);
                }else {
                    return;
                }
            }
        }
    }

    private static void Delete(List<Student1> students, Scanner sc) {
        System.out.println("请输入学生的学号:");
        String studentId = sc.next();
        int index = getIndexByStudentId(students,studentId);
        if (index!=-1){
            students.remove(index);
            System.out.println("删除完成!");
        }else {
            System.out.println("该学生不存在!");
        }
    }

    private static int getIndexByStudentId(List<Student1> students, String studentId) {
        for (int i = 0; i < students.size(); i++) {
            if (students.get(i).getStudentId().equals(studentId)){
                return i;
            }
        }
        return -1;
    }

    private static void Add(List<Student1> students, Scanner sc) {
        System.out.println("请输入学生姓名:");
        String name = sc.next();
        System.out.println("请输入学号:");
        String studentId = sc.next();
        System.out.println("请输入学生成绩:");
        double score = sc.nextDouble();
        students.add(new Student1(name,studentId,score));
        System.out.println("添加成功!");
    }


    private static void menu() {
        System.out.println("请选择你的操作:");
        System.out.println("1、添加学生信息");
        System.out.println("2、删除学生信息");
        System.out.println("3、修改学生信息");
        System.out.println("4、查询学生信息");
        System.out.println("5、显示所有学生信息");
    }
}

class Student1 {
    private String name;
    private String studentId;
    private double score;

    public Student1() {
    }

    public Student1(String name, String studentId, double score) {
        this.name = name;
        this.studentId = studentId;
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public String getStudentId() {
        return studentId;
    }

    public void setStudentId(String studentId) {
        this.studentId = studentId;
    }

    public double getScore() {
        return score;
    }

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

    public void print() {
        System.out.println("姓名" + "\t" + this.name + "\t学号" + "\t" + this.studentId + "\t成绩" + "\t" + this.score);
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值