Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按字母顺序排列通讯簿中的联系人?_Java - Fatal编程技术网

Java 如何按字母顺序排列通讯簿中的联系人?

Java 如何按字母顺序排列通讯簿中的联系人?,java,Java,有人能帮我吗? 我有一个方法,作为管理联系人簿的更大项目的一部分 我需要使用字符串,因此没有数组。 如果可能的话,我想使用compareTo 说明如下: 此方法插入一条接触线(接触线示例: 6 |科里|本|benben@hotmail.com|4502334565)在给定的笔记本中。联络线需要按姓氏的字母顺序排列 此方法不验证副本 参数书我们要介绍接触线的书(来自参数) 我们假设这本书是非空的,但从一开始就是空的 如果非空,则按以下方式形成: /* 3|Crevier|Simon|

有人能帮我吗? 我有一个方法,作为管理联系人簿的更大项目的一部分

我需要使用
字符串
,因此没有数组。 如果可能的话,我想使用
compareTo

说明如下:

此方法插入一条接触线(接触线示例:

6 |科里|本|benben@hotmail.com|4502334565)在给定的笔记本中。联络线需要按姓氏的字母顺序排列

此方法不验证副本

参数书我们要介绍接触线的书(来自参数)

我们假设这本书是非空的,但从一开始就是空的

如果非空,则按以下方式形成:

/*
       3|Crevier|Simon|simon@gmail.com|5145678988 (contact line)
       1|Douglas|Sylvie|nothing|4507461234
       2|Dumoulin|Fred|fredd@yahoo.ca|nothing
       4|Girard|Myriam|nothing|nothing

*/
参数contactLine需要在书中添加的一行上格式化的触点

我们假设接触线为非空、非空且格式良好(如示例中所示)

插入后新书的新字符串。这本新归还的书需要精心编排

此方法需要使用另一个方法:来自同一类的findLastNameContact()(方法从联系人行中获取姓氏,例如第3行| Crevier | Simon|simon@gmail.com|5145678988)=>Crevier是姓氏

我们需要忽略这个案例

/*
----------------------------------------------

METHOD IF CONTACT IS INSERTED IN THE BOOK 
----------------------------------------------
Insert 1|crook|hubert|hubcrook@gmail.com|4502765009 in the empty book... ERROR

Expected:
1|crook|hubert|hubcrook@gmail.com|4502765009

Have found:



Instert 2|aubre|Camille|aucun|5149098778... ERROR

Expected:

2|Aubre|Camille|aucun|5149098778

1|crook|hubert|hubcrook@gmail.com|4502765009

Have found:

1|crook|hubert|hubcrook@gmail.com|45027650092|aubre|Camille|aucun|5149098778

1|crook|hubert|hubcrook@gmail.com|4502765009

Instert 3|charland|Marc|mcrook@yahoo.ca|nothing... ERROR - 
NoSuchElementException unexpected.

Instert 4|mason|Isabelle|aucun|aucun... ERROR - NoSuchElementException unexpected.

Insert 5|fortin|Bruno|brunofortin@hotmail.com|5142768898... ERROR - NoSuchElementException unexpected.

Insert 6|ZHE|Xang|zzz@hotmail.com|4598765423... ERROR - NoSuchElementException unexpected.

Insert 7|morier|Dominic|doum@videotron.ca|4598765423... ERROR

Expected:

    2|Aubre|Camille|aucun|5149098778

    3|CHaRland|Marc|mcrook@yahoo.ca|aucun

    1|crook|hubert|hubcrook@gmail.com|4502765009

    5|Fortin|Bruno|brunofortin@hotmail.com|5142768898

    4|Mason|Isabelle|aucun|aucun

    7|Morier|Dominic|doum@videotron.ca|4598765423

    6|ZHE|Xang|zzz@hotmail.com|4598765423

    Have found  :

    2|Aubre|Camille|nothing|5149098778

    3|CHaRland|Marc|mcrook@yahoo.ca|nothing

    1|crook|hubert|hubcrook@gmail.com|4502765009

    5|Fortin|Bruno|brunofortin@hotmail.com|5142768898

    4|Mason|Isabelle|nothing|nothing
    6|ZHE|Xang|zzz@hotmail.com|45987654237|morier|Dominic|doum@videotron.ca|4598765423
    nothing

    6|ZHE|Xang|zzz@hotmail.com|4598765423


Insertion 8|alban|Roger|Roger@gmail.com|5143677788... ERROR - NoSuchElementException unexpected.

*/
public static String InsertThisContactInTheBook
    (String book, String contactLine) {


        String lastNameContact;
        String id, lastName, givenName, email, phone;
        String newBook = "";

        lastNameContact= findLastNameContact(contactLine);//contact line is from outside, also the findLastNameContact, witch is extraxting la last name from contact line

     //6|cori|ben|benben@hotmail.com|4502334565| (example of contact line)

        StringTokenizer tokens = new StringTokenizer(book, "|");

        // newBook = book+ contactLine;

        while (tokens.hasMoreTokens()){
            id = tokens.nextToken();
            lastName = tokens.nextToken();
            givenName = tokens.nextToken();
            email= tokens.nextToken();
            phone= tokens.nextToken();

            if (lastName.compareToIgnoreCase(lastNameContact) > 0) {
                newBook = book + contactLine +  "\n" + id + "|" + lastName + "|" + givenName + "|" + email+ "|" + phone+ "\n";
            }
        }
        return newBook;
    }

这是家庭作业吗?如果是,你应该让我们知道

首先,在我看来,您在
一书中使用了两种不同的分隔符:
分隔符,用于分隔每个
联系人线路中的数据字段,和
\n
新行分隔符,用于分隔
书籍中的各个
联系人行

请参阅代码的这一部分:

while (tokens.hasMoreTokens()){
    id = tokens.nextToken();
    lastName = tokens.nextToken();
    givenName = tokens.nextToken();
    email= tokens.nextToken();
    phone= tokens.nextToken();
if(lastName.compareTignoreCase(lastName联系人)>0){
newBook=book+contactLine+“\n”+id+“|”+lastName+“|”+givenName+“|”+email+“|”+电话+“\n”;
}
因此,在
|
上划界的
StringTokenizer
将解析
书籍
,就像它的格式是这样的:

6|ZHE|Xang|zzz@hotmail.com|45987654237|morier|Dominic|doum@videotron.ca|459876542|nothing
实际上,两条接触线应为:

6|ZHE|Xang|zzz@hotmail.com|4598765423
7|morier|Dominic|doum@videotron.ca|459876542|nothing
请注意,两条
联络线之间缺少
|
分隔符。因此,它将
book
标记为10个标记,将
45987654237
视为1个标记,而不是2个单独的标记,
4598765423
7
,而不是
StringTokenizer
识别5+6=11个标记

第二个,您上面粘贴的输出中的
联系人线路
条目还有另一个问题。在我上面引用的例子中,有“ZHE Xang”和“morier Dominic”,这两行包含不同的标记。ZHE Xang的
contactLine
包含5个令牌,而morier Dominic的包含6个令牌。因此,上面的
while
循环无法可靠工作-它希望所有
联系人线路都有5个令牌,但有些显然有6个令牌

我引用了您代码的这一部分:

while (tokens.hasMoreTokens()){
    id = tokens.nextToken();
    lastName = tokens.nextToken();
    givenName = tokens.nextToken();
    email= tokens.nextToken();
    phone= tokens.nextToken();

我认为这两个问题的最终结果实际上是同一个问题:它使得
中的代码块不可靠,而
循环不可靠。无论是因为您使用了两个分隔符,但仅在一个分隔符上标记,还是因为某些
联系人线路有6个标记,最终结果是您的算法始终假设5个标记的倍数,但实际上,5、6和9的组合并不是5的干净倍数

我还有几个问题要问你(也许这最好放在你原来帖子的评论里)。值得思考

  • 为什么不能使用任何其他
    String
    s
  • 为什么要使用静态方法而不是类方法(例如
    book.insertContact(contact);

  • 对不起,用法语提问比较容易。我不知道这些问题只用英语回答。我需要按字母顺序排列笔记本中的联系人。是的,你说得对,这只是家庭作业的一小部分,但我不知道该怎么做。我看到了问题,但我能解决。我想使用字符串,因为我已经学会了使用它们。我会用更小的方法来完成更大的项目。这种方法就是其中之一。正如您所注意到的,这个方法调用另一个方法:findLastNameContact(contactLine)->它从联系人线路中提取姓氏。Thx供您参考。如果您可以使用更适合任务的不同数据结构,例如a或a,这将更加容易。这将避免我指出的第一个问题(使用
    \n
    来划分不同的
    接触线),并且可能会更快。你还有别的问题吗?我的回答对你有帮助吗?很遗憾,我不能在这个项目中使用数组或向量。我必须用我迄今为止所掌握的知识来解决这个问题。你帮我看问题出在哪里。另外一个问题我现在还没有,所以非常感谢你的帮助。我很感激。非常欢迎你@NataliaAndronic。如果我的答案有帮助,请随时将其标记为已接受的答案,并投票支持!希望你剩下的作业顺利进行。请告诉我怎么做,因为我是这个网站的新手。谢谢!