java程序根据权重按降序对字符串数组进行排序

时间:2014-10-20 04:38:34

标签: java arrays

我正在尝试为这个java程序编写代码

**编写一个java程序,根据权重按降序对字符串数组进行排序。 弦的重量可以通过以下方式计算:字母A具有权重1而字母a具有权重-1。类似字母Z具有权重26并且字母z具有-26。 样本输入: 3 Python Java HTML

示例输出: HTML Java Python **

我写了以下代码

       import java.util.*; 
       class Sort{
       public static void main(String args[])
       {
         Scanner in=new Scanner(System.in);
         int n=in.nextInt();
         String[] s=new String[n];
        for(int i=0; i<n; i++)
        {
           s[i]=in.next();
        }

         int[] arr=new int[n];
         int weight=0;
         String str="";

        for(int i=0; i<n; i++)
        {
        str=s[i];
          for(int j=0; j<str.length(); j++)
         {
           if((int)str.charAt(j)>64 && (int)str.charAt(j)<91)
           weight+=str.codePointAt(j)-64;
           else
           weight+=96-str.codePointAt(j);
           }
        arr[i]=weight;
        weight=0;
       }
      Arrays.sort(arr);  
    }
   }

我计算了每个字符串的权重,并将其存储在整数数组中并对其进行排序

输入时 第3 Python Java HTML

然后我的int数组按排序顺序返回权重

-66 -14 53

.....现在我面临的问题是将排序的整数数组与原始字符串链接以获得输出。帮我完成该程序。

1 个答案:

答案 0 :(得分:0)

首先,您可以使用一种方法来计算字母的重量。像,

private static int getLetterWeight(char ch) {
    if (!Character.isLetter(ch)) {
        return 0;
    }
    return (Character.isUpperCase(ch)) ? 1 + (ch - 'A') : -1 - (ch - 'a');
}

然后,您可以使用它来计算单词的重量。通过迭代每个字母并对权重求和,

private static int weighWord(String str) {
    int weight = 0;
    for (char ch : str.toCharArray()) {
        weight += getLetterWeight(ch);
    }
    return weight;
}

最后,您可以创建Comparator<String>来比较单词的重量,例如

private static Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        int a = weighWord(o1);
        int b = weighWord(o2);
        if (a < b) {
            return -1;
        } else if (a > b) {
            return 1;
        }
        return 0;
    }
};

然后用它来排序String(s)

Arrays.sort(arr, comparator);