首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给多个方法提供一个数组

给多个方法提供一个数组
EN

Stack Overflow用户
提问于 2020-10-30 10:43:36
回答 1查看 103关注 0票数 0

例如,我们有5门课程: comp2011、comp2012、comp2013、comp2014、comp2015。

在添加或删除课程时,您需要指定学生的名称(您可以假设它是唯一的)和将要添加/删除的课程。

对于添加课程,如果学生已经注册了至少一门课程,系统将将新添加的课程附加到其课程记录中。但是,如果这是学生第一次尝试添加课程,系统将为他/她创建一个记录,并声明这是该学生的第一堂课(见下面的示例输出).

该系统应支持列出学生已注册的课程。

系统应该支持一些基本的验证检查:学生不能添加两次相同的课程,也不能放弃未注册的课程。

当删除最后一门课程时,学生课程列表中将没有任何内容,但是系统仍然应该为他/她保留空文件,以便在添加另一门课程时,它知道这不是第一次。

如何使数组同时支持我的所有方法,知道我已经创建了一个添加、删除、列表和退出的方法。(退出就是没有数组)

这就是我现在的处境:

代码语言:javascript
复制
import java.util.*;
public class codeTraining {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String AddDrop = "";
        while (!AddDrop.equals("Q")) {
            System.out.println("Add-Drop Course Menu");
            System.out.println("A for Add, D for Drop, L for List, Q for Quit");
            AddDrop = input.nextLine();
            switch (AddDrop) {
                case "A" -> A();
                case "D" -> D();
                case "L" -> L();
                case "Q" -> Q();
                default -> System.out.println("Please enter a valid Character!");
            }
        }
    }

    public static void A() {
        Scanner input = new Scanner(System.in);
        String name;
        String course;
        System.out.println("Please enter the student name:");
        name = input.nextLine();
        System.out.println("Please enter the course you want to add:");
        course = input.nextLine();
        System.out.println("Adding course : " + course);
        System.out.println("Add course successfully");
    }

    public static void D() {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter a student name");
        String name = input.nextLine();
        System.out.println("please enter the course you want to drop:");
        String course = input.nextLine();
        System.out.println("Dropping course: " + course);
        System.out.println("Drop course successfully");
    }

    public static void L() {
        Scanner input = new Scanner(System.in);
        String name, course;
        System.out.println("Please enter the student name");
        name = input.nextLine();
    }

    public static void Q() {
        System.out.println("Quit...");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-31 17:11:12

对于这个问题,您可以使用hashmap,因为它将允许您快速、轻松地查找学生的课程。它被声明为所有方法之外的全局变量,这意味着任何方法都可以访问它。

代码语言:javascript
复制
import java.util.*;

public class codeTraining {
    //Hashmap contains names that are mapped to lists of courses
    static HashMap<String, ArrayList<String>> map =
            new HashMap<String, ArrayList<String>>();

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String AddDrop = "";
        while (!AddDrop.equals("Q")) {
            System.out.println("Add-Drop Course Menu");
            System.out.println("A for Add, D for Drop, L for List, Q for Quit");
            AddDrop = input.nextLine();
            //added breaks to the switch statement
            switch (AddDrop) {
                case "A": A(); break;
                case "D": D(); break;
                case "L": L(); break;
                case "Q": Q(); break;
                default: System.out.println("Please enter a valid Character!");
            }
        }
    }

    public static void A() {
        Scanner input = new Scanner(System.in);
        String name;
        String course;
        System.out.println("Please enter the student name:");
        name = input.nextLine();
        System.out.println("Please enter the course you want to add:");
        course = input.nextLine();
        System.out.println("Adding course : " + course);
        //if the map contains the name already
        if (map.containsKey(name)) {
            //if the student already had the course in its list
            if (map.get(name).contains(course)) {
                System.out.println("The student is already taking this course");
                return;
            } else {
                //adding the course to the list that's mapped
                //to the student's name in the hashmap 
                map.get(name).add(course);
            }
        }
        //if student isn't in the system
        else {
            //create a new arraylist with the new course in it
            ArrayList<String> courses = new ArrayList<String>();
            courses.add(course);
            //add a map between the student's name and his course list
            map.put(name, courses);
        }
        System.out.println("Add course successfully");
    }

    public static void D() {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter a student name");
        String name = input.nextLine();
        System.out.println("please enter the course you want to drop:");
        String course = input.nextLine();
        System.out.println("Dropping course: " + course);
        //checks if name in system
        if (map.containsKey(name)) {
            if (map.get(name).contains(course)) {
                //removing if list had the course in it
                map.get(name).remove(course);
            } else {
                System.out.println("This student isn't taking that course");
                return;
            }
        } else {
            System.out.println("This student isn't in the system");
            return;
        }
        System.out.println("Drop course successfully");
    }

    public static void L() {
        Scanner input = new Scanner(System.in);
        String name, course;
        System.out.println("Please enter the student name");
        name = input.nextLine();
        if (map.containsKey(name)) {
            //printing out courses for specified student
            ArrayList<String> courses = map.get(name);
            for (int i = 0; i < courses.size(); i++) {
                System.out.print(courses.get(i) + " ");
            }
        } else {
            System.out.println("This student isn't in the system");
        }
    }

    public static void Q() {
        System.out.println("Quit...");
    }
}

我添加了一些注释,以防您对hashmap不熟悉。基本上,map.put(key, value)将向列表中添加一个映射对,以便当您调用map.get(key)时,它将返回您将其放入的任何值。我希望这能帮上忙,请随便问问你是否感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64606821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档