Как искать элемент в связанном списке из пользовательского ввода Java - PullRequest
0 голосов
/ 30 сентября 2018

так что у меня есть задание для моего класса Data Structures, и я пытался сделать как можно больше, но в настоящее время я застрял в этой части задания, и мне нужна помощь.Задание в основном требует от вас создания java-программы, которая представляет собой базу данных записей о студентах, которая хранит 6 переменных: id, name, subCode, subName, sem и year, используя связанный список.Это то, что я сделал до сих пор.

Основной класс:

import java.util.*;
public class Main {
public int id =0;
public String name= "";
public String subCode="";
public String subName="";
public String sem;
public int year;
LinkedList list = new LinkedList();
Scanner scan = new Scanner(System.in);


public void Menu() {
     boolean valid = true;


    while (valid) {

        final  String menu[] = {"Main Menu", 
                "1. Register student's subjects",
                "2. Retrieve all students' subjects listing",
                "3. Retrieve a student's subjects listing", 
                "4. Update a student's registered subjects",
                "5. Delete a student's registered subjects",
                "6. Delete a student registration", 
                "7. Exit"};

        for (String menuList : menu)
            System.out.println(menuList);


              switch (scan.nextInt()) {
                 case 1:
                    create();
                     break;

                 case 2:
                list.retrieveAll();
                     break;

                 case 3:
                     //retrieveOne();
                     break;

                 case 4:
                    //update();
                     break;                      

                 case 5:
                    //deleteSub();
                     break;

                 case 6:
                    deleteStud();
                     break;

                 case 7:
                     System.out.println("Have a nice day!");
                     valid = false;
                     break;

                 default:
                     System.out.println("You have not entered a valid option");
                     break;
                 }
     }
 }

public void create() {
System.out.println();
boolean validate = true;

while(validate) {
    try {
System.out.println("Please enter Name");
scan.nextLine();
name = scan.nextLine();
//validate =Validation.validateName(name);


    System.out.println("Please enter Student ID");

    String tempID=scan.nextLine();
//  validate=Validation.validateId(tempID);
    id= Integer.parseInt(tempID);

    System.out.println("Please enter student Subject Code"); 
    subCode=scan.nextLine();

    System.out.println("Please enter Subject's Name");
    subName = scan.nextLine();

    System.out.println("Please enter Student's semester");
    sem = scan.nextLine();

    System.out.println("Please enter Student's Year of Study");
    year = scan.nextInt();
    scan.nextLine();

    list.create(id, name, subCode, subName, sem, year);
    validate=false;
/*      list.create(17052960, "Samuel Ho", "CSCP 2014", "Programming 2", "Fall 2017", 2);
    list.create(17040007, "Jodi Mak", "ENVS 1014", "Enviromental Studies", "Fall 2016", 3);
    list.create(17022880, "Yee Hong Chun", "MATH 1024", "Calculus 1", "Fall 2018", 1);
    list.retrieveAll();
    list.deleteAt(1);
    list.retrieveAll();*/


}catch(Exception e) {
validate = true;
}
}
}
public void deleteStud() {
    System.out.println("Enter Student ID of the student you wish to delete");
    int tempID = scan.nextInt();
    scan.nextLine();



}
public static void main(String[] args) {

    Main main = new Main();
    main.Menu();

}
}

Класс LinkedList:

public class LinkedList {
Node head;

public void create(int id, String name, String subCode, String subName, String sem, int year) {
Node node= new Node();
node.id=id;
node.name=name;
node.subCode=subCode;
node.subName=subName;
node.sem=sem;
node.year=year;
node.next=null;

if (head==null) {
    head=node;
}else {
    Node n = head;
    while (n.next!=null) {
        n=n.next;
    }
    n.next=node;
}
}

public void retrieveAll() {
Node node=head;

while(node.next!=null) {
    System.out.printf("%d %3s %10s %3s %14s %3d\n", 
            node.id, node.name, node.subCode, node.subName, node.sem, node.year );
    node=node.next;
}
System.out.printf("%d %3s %10s %3s %14s %3d\n", 
        node.id, node.name, node.subCode, node.subName, node.sem, node.year );

}
public void deleteAt(int index) {
if (index==0)
    head=head.next;
else {
    Node n = head;
    Node n1=null;
    for (int i =0; i<index-1;i++) {
        n=n.next;
    }
    n1=n.next;
    n.next = n1.next;
    System.out.println("Deleted " + n1.id);
    n1=null;
}
}
}

Класс узла:

class Node {
int id;
String name;
String subCode;
String subName;
String sem;
int year;
Node next;
}

Так вот, что я сделал,это далеко от завершения, но мне нужно сделать это быстро, и я застрял в методе deleteStud ().Мне нужно, чтобы пользователь вводил идентификатор студента для удаления.Затем он ищет в связанном списке и удаляет студента.Я реализовал удаление по определенному индексу, но понятия не имею, как искать и удалять студента из их идентификатора.Это также поможет моему методу retrieveOne (), в котором я должен отображать записи ученика, введенные пользователем по их идентификатору.

Надеюсь, я не слишком затянут, но мне действительно нужна твоя помощь.Огромное спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018

Разве это просто не то же самое, что ваша функция deleteAt, за исключением того, что вы проверяете node.Id вместо Index?

Вот грубая ошибка в решении (я не запускал этоили что-нибудь еще).

public void deleteId(int ID){
    Node previousNode=head;
    Node currentNode=head;
    while(currentNode!=null){
        if(currentNode.id==ID){
             previousNode.next=currentNode.next;
             currentNode=currentNode.next;
        }else{
             previousNode=currentNode;
             currentNode=currentNode.next;
        }
    }
    System.out.println("Deleted " + ID);
}

Что этот код делает по существу, так это то, что он проходит через все узлы, начиная с заголовка, отслеживая текущий проверяемый узел и предыдущий проверенный узел.

Если идентификатор текущего узла равен идентификатору, который вы ищете, мы удаляем этот узел из связанного списка, настраивая следующий указатель предыдущего узла.

...