【问题标题】:Java Get User input for first name, last name, age, sort by alphabetical and then by age [duplicate]Java获取用户输入的名字,姓氏,年龄,按字母顺序然后按年龄排序[重复]
【发布时间】:2012-11-27 06:06:21
【问题描述】:

可能重复:
Best way to sort 2 array lists?

package bubblesort;

import java.util.*;

public class BubbleSort {

public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);
    Scanner input2 = new Scanner(System.in);
    List<String> lastnamesList = new ArrayList();
    List<String> firstnamesList = new ArrayList();
    List<Integer> ageList = new ArrayList();       
    List<String> fullnamesList = new ArrayList();
    int decider;
    String EOF = "EOF";


    System.out.println("Enter in 0 to sort by Last Name, Enter in 1 to sort by Age");
    decider = input.nextInt();

    /*if(decider == 0)
    {
    System.out.println("Sorting by Last Name");
        for(int i=0;i<3;i++)
        {
        System.out.println("Please Enter in your Last Name, FirstName, Age: " );
        fullnamesList.add(input2.nextLine());
        }
    Collections.sort(fullnamesList);
    System.out.println("Sorting by Last Name: ");
    System.out.println(fullnamesList);
    }*/ 
    //String[] lastnamesArray = lastnamesList.toArray(new String[lastnamesList.size()]);
    //String[] firstnamesArray = firstnamesList.toArray(new String[firstnamesList.size()]);
    if(decider == 1)
    {
    System.out.println("Sorting by Age");
        for(int i=0;i<3;i++)
        {
        System.out.println("Please Enter in your Last Name: " );
        lastnamesList.add(input2.nextLine());
        System.out.println("Please Enter in your First Name: " );
        firstnamesList.add(input2.nextLine());
        System.out.println("Please Enter in your Age: " );
        ageList.add(input.nextInt());

        }

    String[] firstnamesArray = firstnamesList.toArray(new String[firstnamesList.size()]);
    String[] lastnamesArray = lastnamesList.toArray(new String[lastnamesList.size()]);
    fullnamesList.addAll(firstnamesList);
    fullnamesList.addAll(lastnamesList);
    String[] fullnamesArray = fullnamesList.toArray(new String[firstnamesList.size()+lastnamesList.size()]);

    Collections.sort(fullnamesList);
    System.out.println("Sorting by Age");
    System.out.println(fullnamesList);
    }
}
public static void sortStringBubble(String x[])
{
    int j;
    boolean flag = true;
    String temp;

    while(flag)
    {
        flag = false;
        for(j = 0;j < x.length -1 ; j++)
        {
            if (x [j].compareToIgnoreCase(x[j+1])>0)
            {
                temp = x[j];
                x[j] = x[j+1];
                x[j+1] = temp;
                flag = true;
            }
        }
    }
}

}

我试图将名字、姓氏和年龄放在一起,但我希望它按字母顺序排序,而不是单独排序。

【问题讨论】:

  • 不是重复的。答案表明 OP 的方法是错误的,只需要一个 ArrayList。

标签: java arrays arraylist


【解决方案1】:

而不是

List<String> lastnamesList = new ArrayList();
List<String> firstnamesList = new ArrayList();
List<Integer> ageList = new ArrayList();   

使用

List<Person> personList = new ArrayList<>();

Person 是您自己编写的课程。比只有一个列表要排序。

Person 将包含 lastNamefirstNameage 字段,因此它们将永远在一起。

另外,请参阅 thisthis 的帖子,或 these 的一些帖子。

【讨论】:

  • 我是java的新手,所以person类对我来说很困惑,有没有算法可以根据字母顺序交换姓名和年龄的位置并将字段保持在一起
  • Person 类没有合理的替代方案,因为没有根据一个列表的索引变化对多个列表进行排序的算法。
  • Person 类需要一个 Comparator。
猜你喜欢
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多