A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

付浩

中级黑马

  • 黑马币:110

  • 帖子:41

  • 精华:0

© 付浩 中级黑马   /  2013-5-9 21:46  /  1847 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 付浩 于 2013-5-9 22:33 编辑

cnt,做练习遇到,很简单的数组反序{3,1,5,6,2},数组遍历如下:
  1. public static void printArray(int[] arr)
  2.         {
  3.                 System.out.print("[");
  4.                 for (int a:arr)
  5.                 {
  6.                         if(a!=arr.length-1)
  7.                                 System.out.print(a+",");
  8.                         else
  9.                                 System.out.println(a+"]");
  10.                 }
  11.         }        
复制代码
排序前后调用,输出结果[3,1,5,6,2,[2,6,5,1,3,
什么问题唉,求助
//已解决, if(a!=arr.length-1)错误比较

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

11 个回复

倒序浏览

大哥你的for循环你不能这么定义啊
第一种


class Java
{
        public static void main(String[] args)
        {
                int[] arr=new int[]{1,2,3,4,5,6};
                revArray(arr);
               
                for(int x=0;x<arr.length;x++)
                System.out.print(arr[x]);

        }
        public static void revArray(int arr[])
                {
               
                for(int start=0,end=arr.length-1;start<end;start++,end--)
                        {
                        int m=arr[start];
                        arr[start]=arr[end];
                        arr[end]=m;

                        }
                       
                        }
       
               
        }
//第二种
class Java
{
        public static void main(String[] args)
        {
                int[] arr=new int[]{1,2,3,4,5,6};
                revArray(arr);
                String s=print(arr);
                System.out.print(s);

        }
        public static void revArray(int arr[])
                {
               
                for(int start=0,end=arr.length-1;start<end;start++,end--)
                        {
                        int m=arr[start];
                        arr[start]=arr[end];
                        arr[end]=m;


                       
                        }
       
               
        }
        //因为没法输出上面的多个数字,所以要转换为字符串;
//当调用的函数输出的为数字,要转为字符串时,就要用这个转换方法
public static String print(int []arr)
        {
        String s=" ";
for(int x=0;x<arr.length;x++)
                {

          if(x!=arr.length-1)
                        {
                  
                  s=s+arr[x]+",";

                  }else
                          s=s+arr[x];
        }
return s;
}

}

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
增强for循环式for循环的一种简化形式他不能对数组进行操作,只能展示 要想对数组角标操作,必须得用for循环,
回复 使用道具 举报
不知道我理解的对不对,如果有错 也请高手纠正.
回复 使用道具 举报
LZ,错是错在你不该用高级for来实现这种格式,因为你无法判断是否到达int[]数组的末尾。(特别是你要根据到达数组末尾来输出不同的语句)
a!=arr.length-1  这句就是问题所在,你这是拿数组中的元素跟数组长度比较,而不是拿角标来比较。
回复 使用道具 举报
if中的语句读完是不走else中的语句,改成
  1.         public static void printArray(int[] arr)
  2.         {
  3.                 System.out.print("[");
  4.                 for (int a:arr)
  5.                 {
  6.                         if(a!=arr.length)
  7.                                 System.out.print(a+",");                                
  8.                 }
  9.                 System.out.println(arr[arr.length-1]+"]");
  10.         }   
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
zms2100 发表于 2013-5-9 22:06
LZ,错是错在你不该用高级for来实现这种格式,因为你无法判断是否到达int[]数组的末尾。(特别是你要根据到 ...

哈哈,a是元素不是角标,恍然大悟,当局者迷,谢谢
回复 使用道具 举报
感谢各位的热心回答,弄错的和我一样看书去吧
回复 使用道具 举报
加强for的a:arr 前边的a是数组里的对象,你跟长度作比较所以出问题了
回复 使用道具 举报
  1. class PrintArray{
  2.         public static void main(String[] args)
  3.         {
  4.                 int[] arr ={3,1,5,6,2};
  5.                 printArray(arr);
  6.         }
  7.         public static void printArray(int[] arr)
  8.     {
  9.         System.out.print("[");
  10.         for (int x=arr.length-1;x>=0;x--)
  11.         {
  12.             if(x!=0)
  13.                 System.out.print(arr[x]+",");
  14.             else
  15.                     System.out.println(arr[x]+"]");
  16.         }
  17.     }
  18. }
复制代码
改成普通for循环就很简单
不需要用高级for

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
本帖最后由 horace1988 于 2013-5-9 22:47 编辑

你的for循环定义的有问题,我这里给你一个我写的方法很简单,for循环嵌套if语句。反序也就前后颠倒,我采用中心对称互换方法。可能和二楼有点相似,你参考一下!我是刚学基础,希望对你有所帮助!
  1. class ForDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] abc ={12,34,56,79,21};
  6.                 printArray(abc);
  7.         }
  8.         public static void printArray(int[]arr)
  9.         {
  10.                 //遍历数组
  11.                 for (int x=0;x<arr.length ;x++ )
  12.                 {
  13.                         //中心对称互换
  14.                         if (x<(arr.length-1-x))
  15.                         {
  16.                         int temp = arr[x];
  17.                         arr[x] = arr[arr.length-1-x];
  18.                         arr[arr.length-1-x] = temp;
  19.                         }
  20.                         //打印,加了空格,输出后看的清楚些
  21.                         System.out.print(arr[x]+" ");
  22.                 }
  23.         }
  24.         
  25. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
Sword 金牌黑马 2013-5-10 00:07:34
12#
如果问题已解决,请把分类改成“已解决”,谢谢合作
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马