以下是一数组值颠倒程序, 程序并不能. 请问错在哪里呢? 应该如何修改呢? public class Test
{
    public static void main(String[] args)
    {
//赋值给一个数组. 
        int[] arr = new int[20];
        int i = 0;
        for (i = 0; i < 20; i++)
        {
            arr[i] = (i + 1) * 5;
        }
//数组颠倒
        int temp = 0;
        i = 0;
        int j = 19;
        while (j >= 0)
        {
            temp = arr[i];
            arr[i] = arr[j];
            
            arr[j] = temp;  //问题在这里, temp 为什么不能取得50以上的数呢?      System.out.println(temp + " " + j + " ");            i++;
            j--;
        }
        
        for (i = 0; i <= 19; i++)
        {
            System.out.print(arr[i] + " ");
        }
    }
}

解决方案 »

  1.   

    for(i = 0;i<10;i++)
            {
                temp = arr[i];
                arr[i] = arr[j];
                
                arr[j] = temp;  //问题在这里, temp 为什么不能取得50以上的数呢?      System.out.println(temp + " " + j + " ");              j--;
            }
    就可以了
      

  2.   

    while (j >= 10) {
    ....
    }
      

  3.   

    循环条件一换,j>0换成j>10就可以,如果j>0的话就交换了2次,换过去的值又被换回去了.
      

  4.   

    I just wanna doing sth difference. public static void fun06(){
    String[] arrs = {"are","bre","cre","dre","ere"};
    List list = Arrays.asList(arrs);
    Collections.reverse(list);
    Object[] obj = list.toArray();
    String[] arrsNew = (String[])list.toArray();
    Conica.pl(arrsNew);
    }
      

  5.   


     while (j > 0)
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;  //问题在这里, temp 为什么不能取得50以上的数呢? 
       System.out.print(temp + " ");
                i++;
                j--;
            }各位我把循环条件换成 j>0 后, 显示如下, 数组可以颠倒, 但是temp显示就不正确: temp:   5 10 15 20 25 30 35 40 45 50 50 45 40 35 30 25 20 15 10
    arr[]:  100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5请问怎样才能实现 temp 实现显示 如下情况呢? temp: 100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5
      

  6.   


    不好意思上面的打错, 应该是: temp: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5arr[]: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5
      

  7.   

    wxfJordan(晓仕) ( ) 信誉:100  2006-05-25 14:25:00  得分: 0  
     
     
       
    不好意思上面的打错, 应该是: 
     temp: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5arr[]: 100 95 90 85 80 75 70 65 60 55 50 45 40 35 30 25 20 15 10 5
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~你没打错,循环条件换成 j>0 后, 显示如下,  temp:   5 10 15 20 25 30 35 40 45 50 50 45 40 35 30 25 20 15 10
    arr[]:  100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5这是对的。
      

  8.   

    原因只有一个:循环次数太多了,本来倒过了,又倒回来了.
    现在解释一下你的疑问
    1、j>=0 是数组没变化,而j>0是却是100 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 5,那是因为j>0的话,最后一次交换没做,所以只有100和5换了.
    2  temp的值为什么不过50?因为当j循环到10时,所有个交换已经完成一遍了,temp的值是arr[i]的值,也就是从5到50.这时数组已经换好了,100-55是前十个数,而50-5是后十个数.继续循环,又开始交换,数组的值又被倒回来了,这时temp的值还是arr[i]的值(由于i从10-19,也就是arr[i]是后十个数),也就是从50-5,所以从头到尾temp的值始终不超过50...
      

  9.   

    把while中的条件改为j>i就行了,即while(j>i)
    这样的条件比较通用,无论他的数组长度为多少(奇数个也行).