当前位置: 首页 > 知识库问答 >
问题:

从键盘输入人员数组列表

华星剑
2023-03-14

我想接受用户的输入以填充人员的数组列表。出于某种原因。我不能让它工作。我可以在我创建的列表中添加一个项目,下面是我的代码供参考。在switch函数案例2中的SimplepersonDatabase类中,我希望接受用户输入的姓名、出生日期,并且程序应该自动分配从

例如

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

我还应该能够删除一个人并对名单进行排序。以下是我到目前为止已经实现的内容。

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个答案

赵珂
2023-03-14

你的列表运行良好(我尝试或-)

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;
}
 }

列表

 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);
    }


}

}

问题在于“go”函数,为什么要使用link,然后再使用add-in列表?

 类似资料:
  • 问题内容: 我已经用Java设计了自己的合成器,现在我想将其与Midi键盘连接。我在下面的课程搜索所有带有发射器的Midi设备。它成功找到了我的Midi键盘。我将自己的接收器添加到每个设备的每个发送器中,以便它可以接收所有可能的信息。通过阅读所有帮助文档和Java文档,我知道Transmitter将MidiEvents发送给Receiver,然后由Receiver使用send方法处理它们。因此,我

  • 问题内容: 我有这个数组: 并且我正在寻找一个PHP“ for each”循环,该循环将检索下的键名,即: 我怎样才能做到这一点? 问题答案: 试试吧 在$ key中,您将获得密钥名称,在val中,您将获得值

  • 主要内容:scanf()函数,连续输入,输入其它数据,scanf() 格式控制符汇总程序是人机交互的媒介,有输出必然也有输入,第三章我们讲解了如何将数据输出到显示器上,本章我们开始讲解如何从键盘输入数据。在C语言中,有多个函数可以从键盘获得用户输入: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为字符串处理。 scanf(

  • 8.3.1 键盘输入的中断功能 键盘输入是绝大多数程序的主要输入方式,学习和掌握有关键盘输入中断的使用方法对编写交互式程序是非常重要的,也能更进一步理解计算机是如何接受键盘输入的。 1、键盘缓冲区 键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下: KBHead DW ? ;其内存地址为0000:041AH,缓冲区头指针 KBTail DW ? ;其内存地址为0000:041CH,缓冲区尾指

  • 主要内容:输入单个字符,输入字符串,总结C语言有多个函数可以从键盘获得用户输入,它们分别是: scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。 getchar()、getche()、getch():这三个函数都用于输入单个字符。 gets():获取一行数据,并作为字符串处理。 scanf() 是最灵活、最复杂、最常用的输入函数,上节我们已经进行了讲解,本节接着讲解剩下的函数,也就是字符输入函数和字符串

  • 问题内容: 我正在研究“ less”实用程序的代码,特别是它如何获取键盘输入的代码。有趣的是,在ttyin.c的第80行,它将文件描述符设置为从以下文件读取: 文件描述符2不是stderr吗?如果是这样,是什么?我以为键盘输入是通过stdin发送的。 有趣的是,即使这样做,在文件加载完成后,您仍然可以使用键盘上下滚动,但是如果这样做,则vi会大吼大叫,因为它不会从stdin中读取。有什么大主意?我