Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Hey I need help completing a program. The program creates a registry of names an

ID: 3828318 • Letter: H

Question

Hey I need help completing a program. The program creates a registry of names and ID's. It prompts the user to enter however many names and ids as they desire. I need help making it so that when I print out the registry of names that it prints only the names in alphabetical order. There also needs to be a feature that allows the user to search for a name in the registry using the ID. The methods required for manipulation of the list should already be done in SimpleLinkedList.java,

Here is the code:

List.Java

public interface List<K,V> {
   //abstract methods

public abstract boolean add(K key,V value);

public abstract V remove(K key);

public abstract V remove(int n);

public abstract V remove();

public abstract V lookup(K key);

public abstract int size();

public abstract V get(int n);

public abstract Object[] toArray();

public abstract String toString();

}

SimpleLinkedList.java

public class SimpleLinkedList<K, V> implements List<K, V> {
   private Node head = null;
   private Node tail = null;

   public SimpleLinkedList()
   {
   head = null;
   tail = null;
   }

   @Override
   public boolean add(K key, V value) {
   if (head == null) { // List is empty
   Node nn = new Node(key, value);
   head = nn;
   } else {
   Node node = head;
   while (node.next != null) {
   node = node.next;
   }
   node.next = new Node(key, value);
   }
   return true;
   }
   @Override
   public V remove(K key) {
   Node currentNode = head;
   while(currentNode != null)
   {
   if(((Node)currentNode.next.value).key == key)
   {
   Node removed = currentNode.next;
   currentNode.next = currentNode.next.next;
   return ((Node)(removed.value)).value;
   }
   currentNode = currentNode.next;
   }
   return null;
   }
   @Override
   public V remove(int n) {
   if (head == null)
   return null;
   else
   {
   int intitalPos = 0;
   for( Node currentNode = head; currentNode != null; currentNode = currentNode.next, intitalPos += 1 )
   {
   if ( intitalPos == n)
   {
   Node removed = head;
   head = head.next;
   return ((Node)removed.value).value;
   }
   }
   return null;
   }
   }
   @Override
   public V remove() {
   if(head == null)
   return null;

   else if(head == tail) {

   Node removed = head;
   head = null;
   tail = null;
   return ((Node)removed.value).value;
   }
   else {

   Node removed = head;
   head = head.next;
   return ((Node)removed.value).value;
   }
   }
   @Override
   public V lookup(K key) {
   if (head == null)
   return null;

   Node currentNode = head;

   while(currentNode != null)
   {
   if(((Node)currentNode.next.value).key == key)
   {
   return currentNode.value;
   }
   currentNode = currentNode.next;
   }
   return null;
   }
   @Override
   public int size() {
   int size = 0;
   Node currentNode = head;

   while(currentNode.next != null)
   {
   currentNode = currentNode.next;
   size++;   
   }
   return size;
   }
   @Override
   public V get(int n) {
   if (head == null)
   return null;
   else
   {
   int intitalPos = 0;
   for( Node currentNode = head; currentNode != null; currentNode = currentNode.next, intitalPos += 1 )
   {
   if ( intitalPos == n)
   {
   return currentNode.value;
   }
   }
   return null;
   }
   }
   private class Node {
   protected K key;
   protected V value;
   protected Node next;
   Node(K k, V v) {
   key = k;
   value = v;
   next = null;
   }
   }
   @Override
   public Object[] toArray() {
   int currentSize = size();
   int index = 0;

   if(head == null)
   return null;
   else
   {
   Object[] arrayList = new Object[currentSize];

   for(Node currentNode = head; currentNode != null; currentNode = currentNode.next)
   {
   arrayList[index] = ((Node)currentNode.next.value).value;
   index++;

   }
   return arrayList;
   }

   }
   @Override
   public String toString() {
   StringBuilder sb = new StringBuilder();
   Node node = head;
   while (node != null) {
   sb.append("(" + node.key + "," + node.value + ") -- ");
   node = node.next;
   }
   return sb.toString();
   }


   }

ListDemo.java

import java.util.*;
public class ListDemo {
//main method
public static void main(String args[]){
//Create an object to the MyList class

SimpleLinkedList list = new SimpleLinkedList();

boolean quit = true;
System.out.print("Add Names and ID's to list. Name:");
Scanner kb = new Scanner(System.in);
String k = kb.nextLine();
System.out.print(" ID:");
int v = Integer.valueOf(kb.nextLine());
list.add(k , v);
  
while(quit) {
System.out.println("1.Add another Name. 2.Print Names. 3.Search using ID 4.Quit ");
String choiceStr = kb.nextLine();
int choice = Integer.valueOf(choiceStr);
switch(choice){
case 1:
System.out.println("Enter name :");
String name = kb.nextLine();
System.out.println("Enter ID :");
int id = Integer.valueOf(kb.nextLine());
list.add(name , id);
break;
case 2:

System.out.println(list.toString()); /*this should print only names that needs to be alphabetized (probably using toArray and sorting)*/

break;
case 3:   
System.out.println("Enter ID :");
int Id = Integer.valueOf(kb.nextLine());
System.out.println(list.get(Id)); //search feature
break;
case 4:
quit = false;
break;

}

}
}
}

Explanation / Answer

//List.java

public interface List<K,V> {
//abstract methods
public abstract boolean add(K key,V value);
public abstract V remove(K key);
public abstract V remove(int n);
public abstract V remove();
public abstract V lookup(K key);
public abstract int size();
public abstract V get(K n);
public abstract Object[] toArray();
public abstract String toString();
}

//SimpleLinkedList.java

import java.util.ArrayList;
import java.util.Collections;

public class SimpleLinkedList<K, V> implements List<K, V> {
private Node head = null;
private Node tail = null;
public SimpleLinkedList()
{
head = null;
tail = null;
}
@Override
public boolean add(K key, V value) {
if (head == null) { // List is empty
Node nn = new Node(key, value);
head = nn;
} else {
Node node = head;
while (node.next != null) {
node = node.next;
}
node.next = new Node(key, value);
}
return true;
}
@Override
public V remove(K key) {
Node currentNode = head;
while(currentNode != null)
{
if(((Node)currentNode.next.value).key == key)
{
Node removed = currentNode.next;
currentNode.next = currentNode.next.next;
return ((Node)(removed.value)).value;
}
currentNode = currentNode.next;
}
return null;
}
@Override
public V remove(int n) {
if (head == null)
return null;
else
{
int intitalPos = 0;
for( Node currentNode = head; currentNode != null; currentNode = currentNode.next, intitalPos += 1 )
{
if ( intitalPos == n)
{
Node removed = head;
head = head.next;
return ((Node)removed.value).value;
}
}
return null;
}
}
@Override
public V remove() {
if(head == null)
return null;
else if(head == tail) {
Node removed = head;
head = null;
tail = null;
return ((Node)removed.value).value;
}
else {
Node removed = head;
head = head.next;
return ((Node)removed.value).value;
}
}
@Override
public V lookup(K key) {
if (head == null)
return null;
Node currentNode = head;
while(currentNode != null)
{
if(((Node)currentNode.next.value).key == key)
{
return currentNode.value;
}
currentNode = currentNode.next;
}
return null;
}
@Override
public int size() {
int size = 0;
Node currentNode = head;
while(currentNode.next != null)
{
currentNode = currentNode.next;
size++;   
}
return size;
}
@Override
public V get(K n) {
if (head == null)
return null;
else
{
int intitalPos = 0;
Node node = head;
while (node != null) {
   System.out.println("key "+node.value);
   if(node.value == n){
       return (V)node.key;
   }
   node = node.next;
}
return null;
}
}
private class Node {
protected K key;
protected V value;
protected Node next;
Node(K k, V v) {
key = k;
value = v;
next = null;
}
}
@Override
public Object[] toArray() {
int currentSize = size();
int index = 0;
if(head == null)
return null;
else
{
Object[] arrayList = new Object[currentSize];
for(Node currentNode = head; currentNode != null; currentNode = currentNode.next)
{
arrayList[index] = ((Node)currentNode.next.value).value;
index++;
}
return arrayList;
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
ArrayList<String> list = new ArrayList<>();
Node node = head;
while (node != null) {
   list.add((String)node.key);
node = node.next;
}
Collections.sort(list);
for(int i=0; i<list.size(); i++){
   sb.append("(" + list.get(i) + ") - ");
}
return sb.toString();
}

}

//ListDemo.java

import java.util.*;
public class ListDemo {
//main method
public static void main(String args[]){
//Create an object to the MyList class
SimpleLinkedList list = new SimpleLinkedList();
boolean quit = true;
System.out.print("Add Names and ID's to list. Name:");
Scanner kb = new Scanner(System.in);
String k = kb.nextLine();
System.out.print(" ID:");
int v = Integer.valueOf(kb.nextLine());
list.add(k , v);
  
while(quit) {
System.out.println("1.Add another Name. 2.Print Names. 3.Search using ID 4.Quit ");
String choiceStr = kb.nextLine();
int choice = Integer.valueOf(choiceStr);
switch(choice){
case 1:
System.out.println("Enter name :");
String name = kb.nextLine();
System.out.println("Enter ID :");
int id = Integer.valueOf(kb.nextLine());
list.add(name , id);
break;
case 2:
System.out.println(list.toString()); /*this should print only names that needs to be alphabetized (probably using toArray and sorting)*/
break;
case 3:   
System.out.println("Enter ID :");
int Id = Integer.valueOf(kb.nextLine());
System.out.println(list.get(Id)); //search feature
break;
case 4:
quit = false;
break;
}
}
}
}