如何根据学生的排名打印数字

时间:2015-07-10 15:36:07

标签: java arrays sorting

input:
4
22 96 12 49

output:
2  4  1 3

我想要输出的是根据输入的学生等级。

然而,我现在所尝试的却是错误的。

int count=0;
Scanner sc =new Scanner(System.in);
System.out.println("enter a number");
int a =sc.nextInt();
long[] b=new long[a];
for (int i = 0; i < a; i++) {
     b[i]=sc.nextLong();
}       
Arrays.sort(b);
for (int j = a-1; j >= 0; j--) {
    System.out.println(b[j]);
    count++;
    System.out.println(count);  
}

2 个答案:

答案 0 :(得分:0)

您必须维护原始索引才能以您希望的方式打印。 而不是创建整数数组,创建一个“包装”数组。因此,即使在排序之后,您也知道元素的原始索引,因此您可以将其排名放在正确的索引中。

      Class Wrapper{
            Int index;
            Int value ;
       }

    Wrapper [] input;
    For(int I=0; I< n ; I++){
           Int value = scan next value;
           Input[i] = new Wrapper (I,value);
    }

   sort input based on value; // ascending order

   Int[] output;
   For(int I=0; I < input.length; I++){
       output[input[i].index] = i+1; // to start the rank from 1.
   }
   Print output array

答案 1 :(得分:0)

您可以从Java拥有的实用程序Arrays获取帮助!使用indexOfbinarySearch等从数组中查找给定元素的索引。

    Scanner sc =new Scanner(System.in);
    System.out.println("enter a number");
    int a =sc.nextInt();
    long[] b = new long[a];
    for (int i = 0; i < a; i++) {
         b[i]=sc.nextLong();
    }       
    long[] tem = new long[a];
    System.arraycopy(b, 0, tem, 0, a);
    Arrays.sort(b);

    for (int i = 0; i < a; i++) {
          int res = java.util.Arrays.binarySearch(b, tem[i]);
         System.out.print(res + 1 + " ");
    }

该计划提供:

input:
4
22 96 12 49

output:
2  4  1 3

看,如果数组没有排序:

java.util.Arrays.asList(theArray).indexOf(value)

如果数组已排序,您可以使用二进制搜索来获得性能:

java.util.Arrays.binarySearch(theArray, value)