input from Keyboard into Array list of persons

1.7k Views Asked by At

I want to accept input from user to populate an Array list of Person. for some reason. I can't get it to work. I can add an item into the list I have created below are my code for reference. in the SimplepersonDatabase class in switch function case 2:, I want to accept an an input of names, date of birth from the user and the program should automatically assign the position number starting from

e.g

001. Damien Kluk September, 12.09.1975
002. James  Hunt January , 12.09.2000

I should be able to also delete a person and sort the list of Persons. here are what I have implemented so far.

public class Person { //Person.java
public String fn;
public String ln;
public Date dob;
public int id;

   public Person() {
    }

    public Person(String fn, String ln, Date dob, int id) {
        this.fn = fn;
        this.ln = ln;
        this.dob = dob;
        this.id = id;
    }
}

class List {//List.java

int MAX_LIST = 20;
Person[] persons;
int count;


public List() {
    persons = new Person[MAX_LIST];
    count=0;
}

public int numberOfPersons() {
    return count;
}

public void add(Person person) {
    checkUniqueId(person);
    if (count >= persons.length) {
        // Enlarge array
        persons = Arrays.copyOf(persons, persons.length + 100);
    }
    persons[count] = person;
    ++count;
}

private void checkUniqueId(Person person) {
    for (int i = 0; i < count; ++i) {
       if (persons[i].id == person.id) {
            throw new IllegalArgumentException("Already a person with id "
                + person.id);
       }
    }
}

public void remove(int personId) {
    for (int i = 0; i < count; ++i) {
        if (persons[i].id == personId) {
            --count;
            persons[i] = persons[count];
            persons[count] = null;
            return;
        }
    }
    throw new IllegalArgumentException("No person known with id "
        + personId);
}

}

public class SimplePersonDataBase { //SimplePersonDataBase.java



private static List list;
private static int nextPersonId;



public static void main(String[] args) {

    go();

}

public static void go() {

    List link = new List();

    TextIO.put("Welcome to the SimplePersonDatabase.\n");
    TextIO.putln();

    int option;
    do{

        TextIO.put("available options:\n1) list\n2) add\n3) remove\n4) sort\n5) find\n6) settings\n0) quit\nyour choice:");
        option = TextIO.getInt();

        switch(option){
        case 1:
            PersonFunctions.display();
            break;
        case 2:   // Should accept inputs from a user and update the Persons database
            TextIO.put("Firstname:");
            String fn = TextIO.getlnWord();
            TextIO.put("Lastname:");
            String ln = TextIO.getlnWord();
            Date date = DateFunctions.scanDate();
            int pos = link.count;
            Person item = new Person(fn,ln,date,pos);
            add(item);
            break;
        case 3:
            break;
        case 4:
            TextIO.putln("sort by:\n1) Firstname\n2) Birth\nall other values: lastname");
            switch(TextIO.getInt()){
            case 1:
                break;
            case 2:
                break;
            default :
                break;
            }
            break;
        case 5:
            break;
        case 6:
            break;
        case 0:
            TextIO.put("Thank you for using the SimplePersonDatabase.");
            break;
        case 99:
            break;
        default :
            TextIO.put("illegal option.");
            break;
        }

    }while(option !=0);




}

   public static boolean add(Person personadd) {
       personadd.id = nextPersonId;
       ++nextPersonId;
       list.add(personadd);
       return true;
   }
}
1

There are 1 best solutions below

2
On

Your list is working well (I tried + or -)

import java.util.Arrays;
import java.util.Date;

class Person { // Person.java
public String fn;
public String ln;
public Date dob;
public int id;

public Person() {
}

public Person(String fn, String ln, Date dob, int id) {
    this.fn = fn;
    this.ln = ln;
    this.dob = dob;
    this.id = id;
}
 }

the list

 public class MyList {

int MAX_LIST = 20;
Person[] persons;
int count;

public MyList() {
    persons = new Person[MAX_LIST];
    count = 0;
}

public int numberOfPersons() {
    return count;
}

public void add(Person person) {
    checkUniqueId(person);
    if (count >= persons.length) {
        // Enlarge array
        System.out.println("enlarging");
        persons = Arrays.copyOf(persons, persons.length + 100);
    }
    persons[count] = person;
    ++count;
}

private void checkUniqueId(Person person) {
    for (int i = 0; i < count; ++i) {
        if (persons[i].id == person.id) {
            throw new IllegalArgumentException("Already a person with id "
                    + person.id);
        }
    }
}

public void remove(int personId) {
    for (int i = 0; i < count; ++i) {
        if (persons[i].id == personId) {
            --count;
            persons[i] = persons[count];
            persons[count] = null;
            return;
        }
    }
    throw new IllegalArgumentException("No person known with id "
            + personId);
}

public Person get(int i) {
    return persons[i];
}

public static void main(String[] args) {

    MyList list = new MyList();
    for (int i=0; i<1000; i++) {

        list.add(new Person("fn"+i,"sn"+i,new Date(),i));
        System.out.println(list.get(i) + " " + list.count);
    }


}

}

the problem is in the "go" function, why you are using link and then you add in list?