2012-09-29 41 views
4

我在做一個上升和Java的遞減順序號,這裏是我的代碼:升序和降序號碼順序在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)調用似乎工作 - 但我正在尋找一種類似的簡單方法來提供降序排序,並且無法在文檔中找到它。有任何想法嗎?

+1

反向您的升序代碼將達到降.. .. p – PermGenError

+0

@ chaitanya10大聲笑! – gtgaxiola

+1

爲什麼在每次迭代時對'arr'進行排序?你只需要分類一次。 –

回答

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]); 
       } 
0

只需按升序對數組進行排序並向後打印即可。

Arrays.sort(arr); 
for(int i = arr.length-1; i >= 0 ; i--) { 
    //print arr[i] 
} 
+0

明白了!多謝你們! – xyvyre

+0

@WewDiocampo您可以通過按下側面的綠色複選標記來獎勵您最喜歡的答案。 –

0

您可以在陣列的第一排序,然後依次通過它兩次,一次在兩個方向:

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]); 
} 
+0

知道了謝謝@peter Olson – xyvyre

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

並移動Arrays.sort()出來的,對於循環。您的排序在每次迭代中使用相同的數組..

0

您可以採用升序排列並以相反順序輸出,因此將第二個語句替換爲:

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

如果你在類路徑上有Apache的commons-lang,它有一個你可以使用的方法ArrayUtils.reverse(int [])。

順便說一下,您可能不想在for循環的每個循環中對它進行排序。

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用「oposite」比較器對其進行分類:

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]); 
} 
0

爲什麼你使用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); 
1

你可以做兩個功能,一個是升序,另一個用於降序接下來的兩個職能的工作轉換陣列後列出

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; 
    } 
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); 
    } 
} 
} 
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]); 
    } 
1
int arr[] = { 12, 13, 54, 16, 25, 8, 78 }; 

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

我已經以這種方式完成了(我在爪哇(也編程)新)

import java.util.Scanner; 

公共類SortingNumbers {

public static void main(String[] args) { 
    Scanner scan1=new Scanner(System.in); 
    System.out.print("How many numbers you want to sort: "); 
    int a=scan1.nextInt(); 

    int i,j,k=0; // i and j is used in various loops. 
    int num[]=new int[a]; 
    int great[]= new int[a]; //This array elements will be used to store "the number of being greater." 

    Scanner scan2=new Scanner(System.in); 
    System.out.println("Enter the numbers: "); 

    for(i=0;i<a;i++)  
     num[i] = scan2.nextInt(); 

    for (i=0;i<a;i++) { 
     for(j=0;j<a;j++) { 
      if(num[i]>num[j]) //first time when executes this line, i=0 and j=0 and then i=0;j=1 and so on. each time it finishes second for loop the value of num[i] changes. 
       k++;} 
    great[i]=k++; //At the end of each for loop (second one) k++ contains the total of how many times a number is greater than the others. 
    k=0;} // And then, again k is forced to 0, so that it can collect (the total of how many times a number is greater) for another number. 

    System.out.print("Ascending Order: "); 
    for(i=0;i<a;i++) 
     for(j=0;j<a;j++) 
      if(great[j]==i) System.out.print(num[j]+","); //there is a fixed value for each great[j] that is, from 0 upto number of elements(input numbers). 
    System.out.print("Discending Order: "); 
    for(i=0;i<=a;i++) 
     for(j=0;j<a;j++) 
      if(great[j]==a-i) System.out.print(+num[j]+","); 
} 

}

+0

歡迎來到堆棧溢出。雖然這個問題尚未得到公認答案的答覆,但它在2012年已被問及並已收到若干答案,其中包括來自@ jiri-kremser的非常全面的答案。如果你確實回答了這個問題,你還應該注意爲什麼。換句話說,你的答案提供了什麼額外的信息。例如,更快,更優雅,更短的代碼等。 –