7

私はJavaで昇順および降順の番号を実行しています。これが私のコードです:

System.out.print("Enter How Many Inputs: ");
int num1 = Integer.parseInt(in.readLine());
int arr[] = new int[num1];

for (int i = 0; i<num1; i++) {
    System.out.print("Enter Value #" + (i + 1) + ":");
    arr[i] =Integer.parseInt(in.readLine());
}

System.out.print("Numbers in Ascending Order:" );

for(int i = 0; i < arr.length; i++) {
    Arrays.sort(arr);
    System.out.print( " " +arr[i]);
}

System.out.println(" ");
System.out.print("Numbers in Descending Order: " );

現在、コードは以下を生成します。

Enter How Many Inputs: 5
Enter Value #1:3
Enter Value #2:5
Enter Value #3:6
Enter Value #4:11
Enter Value #5:2
Numbers in Ascending Order: 2 3 5 6 11 
Numbers in Descending Order: 

したがって、Arrays.sort(arr)呼び出しは機能しているようですが、降順の並べ替えを提供する同様の簡単な方法を探していますが、ドキュメントには見つかりません。何か案は?

4

13 に答える 13

7

考えられる解決策は次の 3 つです。

1. 順序を逆にします。

//convert the arr to list first
Collections.reverse(listWithNumbers);
System.out.print("Numbers in Descending Order: " + listWithNumbers);

2. 逆方向に反復して出力します。

Arrays.sort(arr);
System.out.print("Numbers in Descending Order: " );
for(int i = arr.length - 1; i >= 0; i--){
  System.out.print( " " +arr[i]);
}

3.「逆」コンパレーターで並べ替えます。

Arrays.sort(arr, new Comparator<Integer>(){
   int compare(Integer i1, Integer i2) {
      return i2 - i1;
   }
});
// or Collections.reverseOrder(), could be used instead
System.out.print("Numbers in Descending Order: " );
for(int i = 0; i < arr.length; i++){
  System.out.print( " " +arr[i]);
}
于 2012-09-29T21:53:28.940 に答える
3
public static void main(String[] args) {
          Scanner input =new Scanner(System.in);
          System.out.print("enter how many:");
         int num =input.nextInt();
    int[] arr= new int [num];
    for(int b=0;b<arr.length;b++){
   System.out.print("enter no." + (b+1) +"=");
   arr[b]=input.nextInt();
    }

    for (int i=0; i<arr.length;i++) {
        for (int k=i;k<arr.length;k++) {

        if(arr[i] > arr[k]) {

        int temp=arr[k];
        arr[k]=arr[i];
        arr[i]=temp;
        }
            }

    }
    System.out.println("******************\n output\t accending order");


    for (int i : arr){
        System.out.println(i);
    }
}
}
于 2014-06-23T07:32:43.157 に答える
1

なぜ、必要arrayな数の数の最初の質問を使用して気にしているのですか?

ArrayList対応するコンパレータに関連付けられているものを優先します。

List numbers = new Arraylist();
//add read numbers (int (with autoboxing if jdk>=5) or Integer directly) into it

//Initialize the associated comparator reversing order. (since Integer implements Comparable)
Comparator comparator = Collections.reverseOrder();

//Sort the list
Collections.sort(numbers,comparator);
于 2012-09-29T21:54:01.200 に答える
1

昇順用と降順用の 2 つの関数を作成できます。次の 2 つの関数は、配列をリストに変換した後に機能します。

public List<Integer> sortDescending(List<Integer> arr){
    Comparator<Integer> c = Collections.reverseOrder();
    Collections.sort(arr,c);
    return arr;
  }

次の関数

public List<Integer> sortAscending(List<Integer> arr){   
    Collections.sort(arr);
    return arr;
  }
于 2013-03-15T21:29:05.720 に答える
1
package pack2;

import java.util.Scanner;

public class group {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner data= new Scanner(System.in);
    int value[]= new int[5];
    int temp=0,i=0,j=0;
    System.out.println("Enter 5 element of array");
    for(i=0;i<5;i++)
    value[i]=data.nextInt();
     for(i=0;i<5;i++)
     {
     for(j=i;j<5;j++)
     {
      if(value[i]>value[j])
      {
       temp=value[i];
       value[i]=value[j];
       value[j]=temp;
      }
     }

     }
      System.out.println("Increasing Order:");
      for(i=0;i<5;i++)
           System.out.println(""+value[i]); 
    }
于 2016-07-14T04:19:07.600 に答える
0
Arrays.sort(arr, Collections.reverseOrder());
for(int i = 0; i < arr.length; i++){
    System.out.print( " " +arr[i]);
}

そしてArrays.sort()、そのforループから抜け出します..各反復で同じ配列をソートしています..

于 2012-09-29T21:48:04.663 に答える
0

昇順の配列と出力を逆の順序で取得できるため、2 番目の for ステートメントを次のように置き換えます。

for(int i = arr.length - 1; i >= 0; i--) {
    ...
}

クラスパスに Apache の commons-lang がある場合は、使用できるメソッド ArrayUtils.reverse(int[]) があります。

ところで、おそらく for ループのすべてのサイクルでそれをソートしたくないでしょう。

于 2012-09-29T21:53:03.277 に答える
0

前と同じように配列を並べ替えますが、カウントアップではなくカウントダウンするループを使用して、要素を逆順に出力します。

また、並べ替えをループの外に移動します。現在、配列を並べ替える必要があるのに、配列を何度も並べ替えています。

                Arrays.sort(arr);
                for(int i = 0; i < arr.length; i++){
                    //Arrays.sort(arr); // not here
                    System.out.print( " " +arr[i]);
                }
                for(int i = arr.length-1; i >= 0; i--){
                    //Arrays.sort(arr); // not here
                    System.out.print( " " +arr[i]);
                }
于 2012-09-29T21:46:20.083 に答える
0

配列を昇順でソートし、逆方向に出力するだけです。

Arrays.sort(arr);
for(int i = arr.length-1; i >= 0 ; i--) {
    //print arr[i]
}
于 2012-09-29T21:46:26.707 に答える
0

最初に配列をソートしてから、それを 2 回 (両方向に 1 回) ループすることができます。

Arrays.sort(arr); 
System.out.print("Numbers in Ascending Order:" ); 
for(int i = 0; i < arr.length; i++){ 
  System.out.print( " " + arr[i]); 
} 
System.out.print("Numbers in Descending Order: " ); 
for(int i = arr.length - 1; i >= 0; i--){ 
  System.out.print( " " + arr[i]); 
} 
于 2012-09-29T21:46:37.143 に答える