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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李龙 黑马帝   /  2011-7-29 15:47  /  3928 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java如何实现数组的左移?{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的为什么?

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 继续等待同学们的回答!

查看全部评分

6 个回复

倒序浏览
黑马网友  发表于 2011-7-29 22:24:15
沙发
数组使用的是顺序存储方式,就注定他只是查找快速而已,你硬是要那他移来移去的真的是很没效率,还不如使用list直接add,remove那多爽啊。

评分

参与人数 1技术分 +1 收起 理由
小龙 + 1 回答得有点道理,但不是楼主想要的!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-30 10:22:38
藤椅
第一:{6,5,4,3,2,1}左移一位后,5~1全都左进一位,6补到数组的末尾,得到{5,4,3,2,1,6},同理,再移动一位得到{4,3,2,1,6,5}了。
第二:如果楼主是因为  不知道数组左移是怎么回事  而不知道如何编代码的话,那么估计你现在应该会了。那么我告诉你,这道题和软考的一道题比较相似,另外有两个要求如下:
1不允许另外申请数组空间,但可以申请少许变量
2不允许采用每次左移
第三:如果还不会编代码的话可以回复我
回复 使用道具 举报

回复 藤椅 的帖子

谢谢解答!现在会了!1,2楼都感谢!
回复 使用道具 举报
黑马网友  发表于 2011-7-30 13:47:05
报纸
我是用借用StringBuffer来实现你说的数组左移循环,如果能用较简单经典的算法实现会很好,但是我想了半天没想出来,数组有固定长度,用算法的确是不容易实现,要不就要增加额外的变量,如果移动的元素个数少还行,多的话,需要增加较多额外变量[code]public class ArrayPush {
        public static void main(String[] args) {
                  int[] s=new int[]{4,3,2,1,5,6};
                  int n=2;   //移动的元素个数
                  StringBuffer sf=new StringBuffer();
                  //将前s.length-n个元素加入StringBuffer中
                  for(int i=0;i<s.length-n;i++)
                  {
                          sf.append(s[i]);
                  }
                  //从数组S的最后一个元素开始倒着逐个取元素插到StringBuffer的最前面,共取n个
                  for(int i=1;i<=n;i++)  
                  sf.insert(0, s[s.length-i]);
                  //将StringBuffer中的字符转换成整数放到整数数组s中
                  for(int i=0;i<sf.length();i++)
                  {
                          s[i]=(int)sf.charAt(i)-48;
                          System.out.print(s[i]);
                  }
       
        }
}[/code]
回复 使用道具 举报
黑马网友  发表于 2011-7-30 16:11:45
地板

回复 报纸 的帖子

回复楼上!数组是有固定长度,Vector 类可以实现可增长的对象数组。这样能解决数组有固定长度的问题。
另外,谢谢你的回答!
回复 使用道具 举报
黑马网友  发表于 2011-7-30 21:36:18
7#
恩  这我知道,我只是针对你提的问题思考了一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马