java - 如何对不同数据类型的数组进行排序

标签 java arrays sorting

我正在尝试按字母顺序对候选人姓名进行排序,同时对候选人获得的选票进行排序,我使用了两个数组,一个用于姓名,另一个用于投票,因为我按选票排序,姓名数组需要在这里排序,我无法对其进行排序,请帮忙 这是我的代码:

package com.sarga.Swinglearn;
import java.util.Scanner;

public class Project3 {

public static void main(String[] args) 
{

    int i=0,j=0;
    Scanner s=new Scanner(System.in);
    System.out.println("Enter number of candidates");
    int candcount = Integer.parseInt(s.nextLine());
    System.out.println("Enter name of the candiadates");
    String names[]=new String[candcount];//create an array
    for( i=0;i<names.length;i++)
    {
        names[i]=s.nextLine();
    }
    System.out.println("candidates are: ");
    for(i=0;i<candcount;i++)
        System.out.println(names[i]);
    for(i=0;i<candcount;i++)
    {
        for(j=i;j<candcount;j++)
        {
            if(names[i].compareTo(names[j])>0)
            {
                String temp=names[i];
                names[i]=names[j];
                names[j]=temp;  
            }
        }   
    }
    /*To sort names alphabetically*/
    System.out.println("alphabetical order of candidates");
    for(i=0;i<candcount;i++)
    {
        System.out.println(names[i]);
    }
    System.out.println("Enter number of votes of each candidate");
     int votes[]=new int[candcount];
    for(i=0;i<candcount;i++)
    {
         votes[i]=s.nextInt();
        System.out.println(names[i]+":"+votes[i]);
    }
    //sort names based on their votes
    System.out.println("List of candidates according to their votes");
    //int max= votes[1];
    int temp=0;
    for(i=0;i<candcount-1;i++)
    {
        for(j=i;j<candcount;j++)
        {
            if(votes[i]<votes[j])
            {
             temp=votes[i];
             votes[i]=votes[j];
             votes[j]=temp;
            }
        }
    }
    for(i=0;i<candcount;i++)
    System.out.println(names[i]+":"+votes[i]);
    s.close();
}

}

最佳答案

创建一个Candidate类:

public class Candidate implements Comparable<Candidate> {
    private String name;
    private int votes;

    public Candidate(String name, int votes) {
        this.name = Objects.requireNotNull(name);
        this.votes = votes;
    }

    // Getters and setters

    @Override
    public int compareTo(Candidate that) {
        int c = this.name.compareTo(that.name);
        if(c != 0) return c;
        return this.votes - that.votes;
    }
}

接下来创建这些候选人的列表并对它们进行排序:

List<Candidate> clist = new ArrayList<>();
// Add some Candidates to clist
Collections.sort(clist);

关于java - 如何对不同数据类型的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40973645/

相关文章:

Java selenium - 在下拉菜单中选择元素

java - (java) 如何测试输入值是否为 int 类型?

java - 在Swing中对齐垂直和水平顺序组

PHP数组使用一些操作插入到mysql中

javascript - 按字符串属性值对对象数组进行排序

java - java中如何在不终止程序的情况下告诉用户输入的XML字符串无效?

java - 线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : -1

jquery - 循环 JSON 并提取数组/描述,需要帮助

arrays - 在 O(n) 时间和 O(1) 额外空间内找到最大重复数

python - 查找数组中第 n1 个最小数字到第 n2 个最小数字的快速算法