代码:
import java.util.Scanner;
public class Sorting0{
public int[] sort(int[] num){
for(int i=0;i<num.length;i++){
for(int j=0;j<num.length-i-1;j++){
if(num[j]<num[j+1]){
int n=0;
n=num[j];
num[j]=num[j+1];
num[j+1]=n;
}
}
}
return num;
}
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int k=input.nextInt();
Sorting0 s=new Sorting0();
int[] num=new int[100];
for(int i=0;i<k;i++){
num[i]=input.nextInt();
}
s.sort(num);
while(input.hasNext()){
if(input.nextInt()>num[k-1]){
if(input.nextInt()>num[k-2]){
num[k-1]=num[k-2];
}
else{
num[k-1]=input.nextInt();
}
}
}
System.out.println(num[k-1]);
}
}
嗷呜求大神帮看看代码,不造哪里不对了

解决方案 »

  1.   

    你的代码听凌乱的。下面写了个,你参考下.
    特别是你的while循环体和if中执行的代码.import java.util.Scanner;
    import java.util.Comparator;
    import java.util.ArrayList;
    public class Test implements Comparator<Integer>{
    public static void main(String[] args){
    Scanner keyboard = new Scanner(System.in);
    ArrayList<Integer> nums = new ArrayList<>();
    System.out.print("请输入要存储的数字总个数:");
    int count = keyboard.nextInt();
    for(int i = 1 ; i<= count ; i ++){
    System.out.print(String.format("请输入第%d个数值:",i));
    nums.add(keyboard.nextInt());
    } nums.sort(new Test()); System.out.print("请输入要查询的倒数第几位:");
    int index_D = keyboard.nextInt();
    assert index_D > 0;
    int index = 0;
    if(index_D <= nums.size()){
    index = nums.size() - index_D;
    } System.out.println(String.format("倒数第%d位是%d.",index_D,nums.get(index))); } public int compare(Integer i1,Integer i2){
    return i1.compareTo(i2);
    }
    }
      

  2.   

    我理解楼主的问题是将数组从大到小排序,打印第k个值。
    楼主排序算法问题不大,但是main方法中对后续输入的数据的处理出现问题。主要在while的循环体中。修改后代码是:import java.util.Arrays;
    import java.util.Scanner;public class Sorting0 {
    public static void sort(int[] array) {
    int temp;
    int j;
    for (int i = 1; i < array.length; i++) {
    temp = array[i];
    for (j = i - 1; j >= 0 && array[j] < temp; j--) {
    array[j + 1] = array[j];
    }
    array[j + 1] = temp;
    }
    } public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("请输入k的值:");
    int k = in.nextInt();
    int[] num = new int[k];
    System.out.println("请输入数字初始值:");
    for (int i = 0; i < k; i++) {
    num[i] = in.nextInt();
    }
    System.out.println("原始序列:" + Arrays.toString(num));
    sort(num);
    System.out.println("排序后:" + Arrays.toString(num));
    System.out.println("第k个最大值:" + num[k - 1]); int j;
    int temp;
    while (in.hasNext()) {
    temp = in.nextInt();
    System.out.println("输入值:" + temp); if (num[k - 1] < temp) {
    for (j = k - 2; j >= 0 && num[j] < temp; j--) {
    num[j + 1] = num[j];
    }
    num[j + 1] = temp;
    } System.out.println("排序后:" + Arrays.toString(num));
    System.out.println("第k个最大值:" + num[k - 1]);
    }
    in.close();
    }
    }
      

  3.   

    Java 排序有现成的算法,楼上两位已经给出了不用JAVA写排序好多年
      

  4.   

    使用sort()方法排序代码短,但效率不是最高。
    维持一个容量为k的小根堆,对所有元素执行一遍入堆,最后顶点就是第k大元素。效率为O(nlogk)。
    对所有元素的集合进行排序的效率为O(nlogn)。
      

  5.   

    使用sort()方法排序代码短,但效率不是最高。
    维持一个容量为k的小根堆,对所有元素执行一遍入堆,最后顶点就是第k大元素。效率为O(nlogk)。
    对所有元素的集合进行排序的效率为O(nlogn)。sort 方法使用的是快速排序算法,效率不应该会有太大问题,当然它会有一定代价,看你如何取舍当然,如果你的系统里需要进行排序的量非常大的话,应该多考虑一下如何减少排序次数,以及如何维护这个有序队列,而不是经常性地排序