黑马程序员技术交流社区

标题: 求大神看看怎么运行不了,公开视频数组转换这的 [打印本页]

作者: Mr.高    时间: 2014-5-28 14:34
标题: 求大神看看怎么运行不了,公开视频数组转换这的
本帖最后由 Mr.高 于 2014-5-29 20:11 编辑

class  Fanzhuan
{
        public static void main(String[] args)
        {
               
                int[] arr={12,13,23,35,46,66,76,87};
                int swep=fanzhuan(arr);
                System.out.println(swep);
        }
        public static void fanzhuan(int[] arr)
                {for(int x=0,int y=arr.length-1;x<y;x++,y--)
                  
                        huanwei(arr,x,y);        
                        
                }
               
                public static void huanwei(int[] arr,int a,int b)
                        {        int i=arr[a];
                                arr[a]=arr;
                                arr=i;
                        
                        }
}

作者: chang清    时间: 2014-5-28 14:55
class  Fanzhuan
{
        public static void main(String[] args)
        {
               
                int[] arr={12,13,23,35,46,66,76,87};
                /* int swep=fanzhuan(arr);   这个方法fanzhuan(int[] arr)没有返回值啊,编译的时候就会出错。在java中数组做为函数的参数传递是引用传递 。
                System.out.println(swep);   上面都错了,这边就更加的错了                */
               //这样改吧
               for(int x = 0 ; x < arr.length ; x++){
                       Sytem.out.print(arr[x]);
               }
               System.out.println();
        }
        public static void fanzhuan(int[] arr)
                {for(int x=0,int y=arr.length-1;x<y;x++,y--)
                  
                        huanwei(arr,x,y);        
                        
                }
               
                public static void huanwei(int[] arr,int a,int b)
                        {        int i=arr[a];
                                arr[a]=arr;
                                arr=i;
                        
                        }
}

作者: 汤姆纳斯    时间: 2014-5-28 15:33
chang清 发表于 2014-5-28 14:55
class  Fanzhuan
{
        public static void main(String[] args)

为什么是for循环那出现了问题,麻烦运行一下看看
作者: 海世山盟    时间: 2014-5-28 16:32
要翻转一个数组不用这么麻烦吧,两行就行了
for(int y=arr.length-1;y>=0;y--)
{
System.out.println(arr[y]);
}
作者: code2014    时间: 2014-5-28 18:13
可以这样修改:

public class Fanzhuan {
          public static void main(String[] args)
      {
              
              int[] arr={12,13,23,35,46,66,76,87};
              int[] swep=fanzhuan(arr);
              System.out.println(swep);
              for(int a:arr)
              {
                      System.out.println(a);
              }
      }
      public static int[] fanzhuan(int[] arr)
              {for(int x=0, y=arr.length-1;x<y;x++,y--)// y前面得int去掉就可以了
               
                     huanwei(arr,x,y);        
                   return arr;
              }
              
              public static void huanwei(int[] arr,int a,int b)
                      {       int i=arr[a];
                              arr[a]=arr[b];
                              arr[b]=i;
                      }
}

作者: Alan_Kwan    时间: 2014-5-28 18:38
汤姆纳斯 发表于 2014-5-28 15:33
为什么是for循环那出现了问题,麻烦运行一下看看

因为不能这样定义:
int a, int b;
只能是int a ,b;
或者int a; int b;
作者: yinxjfly    时间: 2014-5-28 20:18
  int swep=fanzhuan(arr);
  public static void fanzhuan(int[] arr)
我截取了你程序中的两行代码,你比对一下,
一个返回值类型为void的函数(fanzhuan(int[] arr))被调用后赋给了一个int类型的变量?
这样不可以吧!
稍加改动就OK了!



作者: shisaa    时间: 2014-5-28 21:40
本帖最后由 shisaa 于 2014-5-28 22:02 编辑

同楼主一样,也刚开始学习。
看楼主代码发现两个问题,楼上的前辈们也做了回答:
1.方法的返回值。楼主可能没有注意到定义方法的修饰符。  
public static void fanzhuan(int[] arr) :
public 访问权限,公共方法全局访问; static 静态方法修饰符号;void 返回值类型,void表示无返回。
2.变量的定义。
  {for(int x=0,int y=arr.length-1;x<y;x++,y--)
int变量定义的几种不同表现:
int a ,b;
或者    int a; int b;

另外,希望楼主能注意代码的规范(如对齐,采用驼峰法命名等FanZhuan),以方便阅读。

再另外,写了个返回数组的翻转方法以做交流。
/**
将一个数组的顺序颠倒,并输入。
*/
class  FanZhuanDemo
{
        public static void main(String[] args)
        {

                int[] arr={12,13,23,35,46,66,76,87};//定义数组
                arr=FanZhuan(arr);
                for(int x=0;x<arr.length;x++)
                {
                        System.out.println(arr[x]);
                }
        }
        //这个方法将传入的数组参数翻转
          public static int[] FanZhuan(int[] arr)
        {
                int[] result=new int[arr.length];
                for(int x=0;x<arr.length;x++)
                {
                        result[arr.length-1-x]=arr[x];
                }
                return result;
        }
}


作者: qfch    时间: 2014-5-28 22:06
来学习的啊
作者: Mr.高    时间: 2014-5-29 16:53
code2014 发表于 2014-5-28 18:13
可以这样修改:

public class Fanzhuan {

帅气,谢谢啊!!!!!!
作者: Mr.高    时间: 2014-5-29 16:54
shisaa 发表于 2014-5-28 21:40
同楼主一样,也刚开始学习。
看楼主代码发现两个问题,楼上的前辈们也做了回答:
1.方法的返回值。楼主可能 ...

恩恩,发现你比我认真多了,未来的大牛
作者: Mr.高    时间: 2014-5-29 16:55
Alan_Kwan 发表于 2014-5-28 18:38
因为不能这样定义:
int a, int b;
只能是int a ,b;

不错!学习了!!!!
作者: zimi626    时间: 2014-5-29 22:19
我也来凑凑热闹刚学到二维数组,试试水了。

  1. /*
  2. 需求:数组反转
  3. 思路:借用变量临储,将数组数值镜像换位;
  4. */
  5. class day3_4
  6. {       
  7.         public static void fanzhuan(int[] arr)
  8.         {
  9.                 for(int x=0;x<(arr.length-1)/2+1;x++ )
  10.                 {                       
  11.                         int temp=arr[x];
  12.                                 arr[x]=arr[arr.length-x-1];
  13.                                 arr[arr.length-x-1]=temp;                                       
  14.                 }
  15.         }

  16.         //主函数
  17.         public static void main(String[] args)
  18.         {       
  19.                 int[] arr={23,45,6,71,31,53,15,83,94};
  20.                 printArray(arr);
  21.                 fanzhuan(arr);//载入反转;
  22.                 printArray(arr);
  23.         }
  24.        
  25.         //美化结果,可弃之;
  26.         public static void printArray(int[] arr)
  27.         {
  28.                 System.out.print("[");
  29.                 for(int j=0;j<arr.length;j++)
  30.                 {
  31.                         if(j!=arr.length-1)
  32.                                 System.out.print(arr[j]+",");
  33.                         else
  34.                                 System.out.println(arr[j]+"]");
  35.                 }
  36.         }
  37. }
复制代码

作者: zimi626    时间: 2014-5-30 22:32
chang清 发表于 2014-5-28 14:55
class  Fanzhuan
{
        public static void main(String[] args)

这个修改是错误的。你试运行了没?
作者: chang清    时间: 2014-5-31 19:31
zimi626 发表于 2014-5-30 22:32
这个修改是错误的。你试运行了没?

public 啊
作者: chang清    时间: 2014-5-31 19:33
zimi626 发表于 2014-5-30 22:32
这个修改是错误的。你试运行了没?

还有 ,你中间有些单词打错了的 ,不要复制我的代码 ,我是复制你的代码修该的
作者: chang清    时间: 2014-5-31 19:44
zimi626 发表于 2014-5-30 22:32
这个修改是错误的。你试运行了没?

对了,补充下我没运行。
public class Test{
        public static void main(String[] args){
                int[] arr = { 12, 13, 23, 35, 46, 66, 76, 87 };
                /*打印反转前数组*/
                printArray(arr);
                /*反转*/
                reverse(arr);
                System.out.println();/*换行*/
                /*打印反转后数组*/
                printArray(arr);
               
        }
        public static void reverse(int[] arr){
                /*反转函数*/
                for (int i = 0; i < (arr.length-1)/2; i++) {
                        if(i<(arr.length)/2){
                                swap(arr,i,arr.length-i-1);
                        }
                }
               
        }
        private static void swap(int[] arr, int i, int j) {
                /*执行交换,在这个例子里面这个函数没必要独立出来*/
                int temp = arr;
                arr = arr[j];
                arr[j] = temp ;
        }
       
        public static void printArray(int[] arr){
                /*打印数组*/
                for (int i = 0; i < arr.length; i++) {
                        System.out.print(arr+",");
                }
        }
}
作者: fenzheng    时间: 2014-5-31 19:52
第一个:返回值的问题:
第二个:数组的角标你没有写完
这样就好了
package com.itheima;

class Fanzhuan {
        public static void main(String[] args) {

                int[] arr = { 12, 13, 23, 35, 46, 66, 76, 87 };
                int[] swep = fanzhuan(arr);
                System.out.println(swep);
        }

        public static int[] fanzhuan(int[] arr) {
                for (int x = 0, y = arr.length - 1; x < y; x++, y--)

                        huanwei(arr, x, y);
                return arr;

        }

        public static void huanwei(int[] arr, int a, int b) {
                int i = arr[a];
                arr[a] = arr[b];
                arr[b] = i;

        }
}
作者: fenzheng    时间: 2014-5-31 20:01
你打印的是一个int[]的地址,没错的,这个肯定不是你要的结果,代码是没有问题,你肯定想打印出每个元素对吧?package com.itheima;

class Fanzhuan {
        public static void main(String[] args) {

                int[] arr = { 12, 13, 23, 35, 46, 66, 76, 87 };
                int[] swep = fanzhuan(arr);
                System.out.println(swep);
        }

        public static int[] fanzhuan(int[] arr) {
                for (int x = 0, y = arr.length - 1; x < y; x++, y--)

                        huanwei(arr, x, y);
                return arr;

        }

        public static void huanwei(int[] arr, int a, int b) {
                int i = arr[a];
                arr[a] = arr[b];
                arr[b] = i;

        }
}
作者: fenzheng    时间: 2014-5-31 20:07
完美解决,加一个StringBuilder 就可以了
package com.itheima;

class Fanzhuan {
        public static void main(String[] args) {

                int[] arr = { 12, 13, 23, 35, 46, 66, 76, 87 };
                int[] swep = fanzhuan(arr);
                StringBuilder sbBuilder = new StringBuilder();
                for(int i: swep){
                        sbBuilder.append(i);
                        if(i!=swep[swep.length-1]){
                                sbBuilder.append(" ");//加一个空格美观
                        }
                }
                System.out.println(sbBuilder.toString());
        }

        public static int[] fanzhuan(int[] arr) {
                for (int x = 0, y = arr.length - 1; x < y; x++, y--)

                        huanwei(arr, x, y);
                return arr;

        }

        public static void huanwei(int[] arr, int a, int b) {
                int i = arr[a];
                arr[a] = arr[b];
                arr[b] = i;

        }
}
作者: fenzheng    时间: 2014-5-31 20:08
运行的结果:
87 76 66 46 35 23 13 12

作者: fenzheng    时间: 2014-5-31 20:12
结贴吧!
作者: zimi626    时间: 2014-5-31 22:52
chang清 发表于 2014-5-31 19:44
对了,补充下我没运行。
public class Test{
        public static void main(String[] args){

代码依然无法运行!
你回帖后,楼下有个仁兄给了你点意见,很好的说明了问题。
再就是,单行注释还是建议用//
作者: chang清    时间: 2014-6-1 10:10
zimi626 发表于 2014-5-31 22:52
代码依然无法运行!
你回帖后,楼下有个仁兄给了你点意见,很好的说明了问题。
再就是,单行注释还是建议 ...

之前我是运行过的 ,你说不能运行的原因是 发帖的时候数组的角标不知道怎么就没了 。我用多行注释就是防止论坛自动换行导致注释变成了程序的错误代码。
作者: 汤姆纳斯    时间: 2014-6-1 12:19
学习了,楼主大牛啊




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