黑马程序员技术交流社区

标题: 大家帮忙看下我这样写有什么错 [打印本页]

作者: 陈永波    时间: 2012-6-23 14:02
标题: 大家帮忙看下我这样写有什么错
本帖最后由 陈永波 于 2012-6-23 14:28 编辑

题目是将一个数组中素有元素反转、
public class Test{
  public static void main(String[] args) {
      int[] arr = {1,2,3,4,5,6,7,8}
        reverse(arr);
  }
  public static void reverse(int[] arr){
         int temp;
         for(int i = 0; i < arr.length; i++){
         temp = arr;
         arr = arr[arr.length-1-i];
         arr[arr.length-1-i] = temp;
         System.out.println(arr);
        }
  }
}
输出结果是87655678.求解答。
正确结果应该是 87654321

作者: 闾丘日月    时间: 2012-6-23 14:15
首先,反转数组,你应该返回一个数组,不是在函数内部做输出。
其次,分析你的程序,i = 0 a[] = {8,2,3,4,5,6,7,1} 输出a[0] = 8
                              i= 1 a[] = {8,7,3,4,5,6,2,1} 输出 a[1]=7
                               i= 2 a[] = {8,7,6,4,5,3,2,1}  输出a[2]=6
                              i= 3 a[] = {8,7,6,5,4,3,2,1}  输出a[3]=5
                             i= 4 a[] = {8,7,6,4,5,3,2,1}  输出a[4]=5
                             i= 5 a[] = {8,7,3,4,5,6,2,1}  输出a[5]=6
后面的我就不给你列出来了,自己分析吧,至于如何修改
你反转的时候遍历只需要到lengh/2即可,因为如果你都换了。那么数组里面的元素等于没换


作者: 王明明    时间: 2012-6-23 14:16
本帖最后由 王明明 于 2012-6-23 14:40 编辑

public class Testc{
  public static void main(String[] args) {
      int[] arr = {1,2,3,4,5,6,7,8};
        reverse(arr);
  }
  public static void reverse(int[] arr){
         int temp;
         for(int i = 0; i < arr.length/2; i++){ //这里 你看看你I的值交换后 I=4的时候 又开始把8 7 6 5换回去了 除2 就可以了
         temp = arr;
         arr = arr[arr.length-1-i];
         arr[arr.length-1-i] = temp;
               
        }
                for(int i = 0; i < arr.length; i++){
                        System.out.println(arr);
                }
  }
}

收尾同时都减一 也可以
public class Testc{
  public static void main(String[] args) {
      int[] arr = {1,2,3,4,5,6,7,8};
    reverse(arr);
  }
  public static void reverse(int[] arr){
         int temp;
         for(int i = 0,y=arr.length-1;i < y; i++,y--)
    {
         temp = arr;
         arr = arr[y];
         arr[y] = temp;        
        }
   for(int i = 0; i < arr.length; i++){
                        System.out.println(arr);
                }
             }
}


作者: 王杰    时间: 2012-6-23 14:16
  1. public class Test{
  2.   public static void main(String[] args) {
  3.       int[] arr = {1,2,3,4,5,6,7,8};
  4.         reverse(arr);
  5.                 for (int i= 0 ;i<arr.length ;i++ )
  6.                 {
  7.                         if(i!=(arr.length-1))
  8.                                 System.out.print(arr[i]+",");
  9.                         else
  10.                                 System.out.println(arr[i]);
  11.                 }
  12.   }
  13.   public static void reverse(int[] arr){
  14.          int temp;
  15.          for(int i = 0; i < arr.length/2 ; i++){
  16.          temp = arr[i];
  17.          arr[i] = arr[arr.length-1-i];
  18.          arr[arr.length-1-i] = temp;
  19.         }
  20.   }
  21. }
  22. //按照你的思路,你不用全部遍历,遍历一半就可以了。
复制代码

作者: 张华廷    时间: 2012-6-23 14:24


public class Text{
   public static void main(String[] args) {
       int[] arr = {1,2,3,4,5,6,7,8};
         reverse(arr);
   }
   public static void reverse(int[] arr){
          int temp;
          for(int i = 0; i < arr.length; i++){
          temp = arr[i];
          arr[i] = arr[arr.length-1-i];
          arr[arr.length-1-i] = temp;
         
         }
        for(int i = 0; i < arr.length; i++)
        {
                System.out.print(arr[i]);//输出在方法外
        }
  }
        
}
结果:12345678
作者: 李伟    时间: 2012-6-23 14:32
public class Test
{
  public static void main(String[] args)
  {
      int[] arr = {1,2,3,4,5,6,7,8}
        reverse(arr);
  }
  public static void reverse(int[] arr)
  {
         int temp;
         for(int start= 0,end=arr.length-1; start< end; start++,end--)
         {
         temp = arr[start];
         arr[start] = arr[end];
         arr[end] = temp;
         System.out.println(arr[i]);
        }
  }
}

作者: 李伟    时间: 2012-6-23 14:36
public class Test
{
  public static void main(String[] args)
  {
      int[] arr = {1,2,3,4,5,6,7,8}
        reverse(arr);
  }
  public static void reverse(int[] arr)
  {
         int temp;
         for(int start= 0,end=arr.length-1; start< end; start++,end--)//
         {
             temp = arr[start];
             arr[start] = arr[end];
             arr[end] = temp;
         }  
        System.out.println(arr);
  }
}

作者: 王晓新    时间: 2012-6-23 14:36
  1. public class Test{
  2.   public static void main(String[] args)
  3.         {
  4.       int[] arr = {1,2,3,4,5,6,7,8};
  5.         reverse(arr);
  6.                 for(int i=0;i<arr.length;i++)//这里输出不能在for循环里面,因为在for循环里面只会输出4个值。
  7.                              System.out.println(arr[i]);
  8.         }
  9.   public static void reverse(int[] arr){
  10.          int temp;
  11.          for(int i = 0; i < arr.length/2; i++){//交换的时候只需要交换到一半就行了,如果这里写length,就会还原了
  12.          temp = arr[i];
  13.          arr[i] = arr[arr.length-1-i];
  14.          arr[arr.length-1-i] = temp;
  15.         }
  16.   }
  17. }
复制代码

作者: 任传敏    时间: 2012-6-23 14:41
哥们,程序中有很多错误呢,我都怀疑你是怎么运行出结果的,帮你改了一下,看看你错在哪里:
public class Test {
        public static void main(String[] args) {
                int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
                reverse(arr);
        }

        public static void reverse(int[] arr) {
                int temp;
                for (int i = 0; i < arr.length / 2; i++) {
                        temp = arr[i];
                        arr[i] = arr[arr.length - 1 - i];
                        arr[arr.length - 1 - i] = temp;
                }
                for (int i : arr)
                        System.out.println(i);
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2