Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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_Algorithm_Sorting - Fatal编程技术网

Java 给较矮的人分类

Java 给较矮的人分类,java,algorithm,sorting,Java,Algorithm,Sorting,所以我有一个Person类,它包含一个人的名字(字符串)和一行中前一个人的名字。我们已经知道“彼得”是排在第一位的,他没有前辈。我想给他们一个显示订单的数字 class Person{ private String name; private int number; private String previousName; //getters and setters... } 结果应该是: Peter - 1 Joseph - 2 Dave - 3 Ste

所以我有一个Person类,它包含一个人的名字(字符串)和一行中前一个人的名字。我们已经知道“彼得”是排在第一位的,他没有前辈。我想给他们一个显示订单的数字

class Person{

    private String name;
    private int number;
    private String previousName;
    //getters and setters... 
} 
结果应该是:

Peter - 1
Joseph - 2
Dave - 3
Steve - 4
Samuel - 5
我的结果是:

Peter 1
Dave 3
Samuel 2
Joseph 2
Steve 1

我还没有测试过,但应该可以。基本思想是在列表中找到第一个人。然后在列表上迭代,找到下一个以上一个名字作为当前名字的人。当然不是一个非常优化的解决方案,但可以改进

//Find the first person in list, assuming first person has no previous name
int currentPerson = 0;
for (int i=0; i<persons.length; i++){
    if (persons[i].getPreviousName().equals("")){
        currentPerson = i;
        break;
    }
}
persons[currentPerson].setNumber(1);
int count = 1;

//loop until you number every person
while (count < persons.length){
    //find the next person after current person
    for (int i=0; i<persons.length; i++){
        if (persons[i].getPreviousName().equals(persons[currentPerson].getName())){
            persons[currentPerson].setNumber(count++);
            currentPerson = i;
            break;
        }
    }
}
//在列表中查找第一个人,假设第一个人以前没有名字
int currentPerson=0;

对于(int i=0;i您在标题中提到了“身高”,但代码中没有提到身高。您能否澄清此人的身高与您的问题之间的关系?您将如何手动对这些人进行编号?如果我给您的姓名与您在程序中键入的姓名相同,您将如何对其进行编号?该行基于“身高”,人的实际身高并不重要,只是行中的位置。因此,当您输入
Dave;Joseph时,这意味着Joseph更短(更高)而不是Dave?作为一名程序员,你需要培养的一项技能是确定解决问题时哪些细节重要,哪些细节不重要。在这种情况下,身高的概念只是给出你试图解决的问题的故事中的一个背景细节。它实际上与你如何编写代码无关。这里的重要部分是你有一个输入,告诉你哪个人跟在另一个人后面。回到我前面的问题:如果输入中有“before;after”的列表,你会如何手工对名字进行排序?通过示例,然后尝试。。。
Peter 1
Dave 3
Samuel 2
Joseph 2
Steve 1
//Find the first person in list, assuming first person has no previous name
int currentPerson = 0;
for (int i=0; i<persons.length; i++){
    if (persons[i].getPreviousName().equals("")){
        currentPerson = i;
        break;
    }
}
persons[currentPerson].setNumber(1);
int count = 1;

//loop until you number every person
while (count < persons.length){
    //find the next person after current person
    for (int i=0; i<persons.length; i++){
        if (persons[i].getPreviousName().equals(persons[currentPerson].getName())){
            persons[currentPerson].setNumber(count++);
            currentPerson = i;
            break;
        }
    }
}