2014-11-14 34 views
0

我的代码要求用户输入一定的温度并打印出平均值,然后按照升序和降序排列温度。对于升序,我使用了选择排序和降序,我使用了冒泡排序。我的问题是,当我使用冒泡排序时,最后一个排序的元素不打印,我不知道它为什么这样做。我究竟做错了什么?气泡排序不打印最后一个元素

public static void main(String[] args) { 

    Scanner keyboard=new Scanner(System.in); 
    System.out.println("How many temperatures?"); 
    int size=keyboard.nextInt(); 
    int temp[]=new int[size]; 
    System.out.println("Please enter "+temp.length+" temperatures"); 
    double sum=0; 
    for(int i=0;i<temp.length;i++){ 
     temp[i]=keyboard.nextInt(); 
     sum=sum+temp[i]; 
    } 
    double average=sum/temp.length; 
    System.out.println("The average temperature is: "+average); 


    System.out.println(" "); 
    System.out.println("Selection sort algorithm for ascending order"); 
    int min; 
    for (int i = 0; i < temp.length; i++) { 

    min = i; 
    for (int j = i + 1; j < temp.length; j++) { 
     if (temp[j] < temp[min]) { 
      min = j; 
     } 
    } 
    if (min != i) { 
     int temporary_var = temp[i]; 
     temp[i] = temp[min]; 
     temp[min] = temporary_var; 
    } 
    System.out.print(temp[i]+ " "); 

} 
System.out.println(""); 
System.out.println("Bubble sort algorithm for descending order"); 
for(int i=0; i<temp.length-1; i++) 
{ 
    if(temp[i]>temp[i+1]) 
    { 
    int temporary_var = temp[i ];    //swap elements 
    temp[i] = temp[ i+1 ]; 
    temp[i+1] = temporary_var; 
    } 
System.out.print(temp[i]+" ");  
} 
} 

}

回答

1

您在分拣环,其为具有长度为1的for(int i=0; i<temp.length-1; i++)打印。这就是为什么它不打印最后一个元素。将其更改为for(int i=0; i<temp.length; i++),因为您已经有运营商的<

+0

当我使用(int i = 0; i 2014-11-14 18:57:01

+0

而不是if(temp [i]> temp [i +1])如果((我 temp [i + 1]) – Abe 2014-11-14 19:02:12

+0

我会试试这个,因为我有一个索引超出范围 – 2014-11-14 19:02:27

0

我不相信你的气泡排序算法是正确的。只有一个循环和交换?这只是一次冒泡排序,并不会为你排序。
首先纠正你的算法,然后输出数字外循环
下面是泡正确的代码排序

for(int k=0; k<temp.length; k++) 
    { 
     for(int i=0;i<temp.length-1;i++) 
     { 
     if(temp[i]>temp[i+1]) 
     { 
      int temporary_var = temp[i ];    //swap elements 
      temp[i] = temp[ i+1 ]; 
      temp[i+1] = temporary_var; 
     } 

    } 

//print array here 
0

你冒泡排序的print语句是循环的一部分,只有到达长度的指数减去2。对于零索引数组,最后一个索引是长度 - 1.