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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丘凤光 金牌黑马   /  2013-4-8 22:47  /  1200 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丘凤光 于 2013-4-9 12:44 编辑

遇到这样一个题目,按照我自己的思路,有一步需要将一个int数组取出一个后前后两部分反转,重新构成一个新的数组
  1. /*
  2. 思路:
  3. 有1到x的一个int型数组,把第y个数字去掉(y>x时,再次遍历数组,如此往复直到数到y),
  4. 将数组y之后的数挪到前面、y前面的数挪到后面,从新组成一个长为x-2的数组
  5. */
复制代码

我试了很多次,也想了集合的方法,但因基础不牢固,没找到合适的方法。
希望各位朋友帮忙解决一下。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 黄小贝 于 2013-4-9 02:29 编辑

我写了两种方法,你都看看吧




  
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collections;
  4. import java.util.List;

  5. public class Test {
  6. public static void main(String[] args) {

  7. Integer[] arrays = new Integer[] { 1, 2, 3, 4, 5 };

  8. arrays = operation1(arrays, 9);

  9. for (int i = 0; i < arrays.length; i++) {
  10. System.out.println(arrays[i]);
  11. }
  12. }

  13. private static Integer[] operation1(Integer[] arrays, int index) {

  14. index = index % arrays.length;//取整计算index

  15. List<Integer> list = new ArrayList<Integer>();
  16. //List<Integer> list = Arrays.asList(arrays);

  17. for (int i = 0; i < arrays.length; i++) {
  18. list.add(arrays[i]);
  19. }

  20. List<Integer> list1 = list.subList(0, index-1);
  21. List<Integer> list2 = list.subList(index, list.size());

  22. list2.addAll(list1);

  23. Integer[] retVal = new Integer[arrays.length - 1];

  24. return list2.toArray(retVal);
  25. }

  26. private static Integer[] operation2(Integer[] arrays, int index) {

  27. index = index % arrays.length;//取整计算index

  28. Integer[] retVal = new Integer[arrays.length - 1];

  29. for (int i = 0; i <= retVal.length - index; i++) {
  30. retVal[i] = arrays[index + i];
  31. }

  32. for (int i = retVal.length - index + 1; i < retVal.length; i++) {
  33. retVal[i] = arrays[i - arrays.length + index];
  34. }

  35. return retVal;
  36. }

  37. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
//不知道符不符合题意
package com.ccsu.xie.test;

import java.util.Iterator;
import java.util.LinkedList;

public class ArrayReverse {
        private LinkedList<Integer> li = new LinkedList<Integer>();//存储预操作数组
        private LinkedList<Integer> result = new LinkedList<Integer>(); //存储结果数据
        public static void main(String[] args) {
                int [] array ={1,2,3,4,5,6,7};
                ArrayReverse ar = new ArrayReverse();
                ar.put(array);
                ar.dReverse(3); //删除4
                ar.show();  //输出5,6,7,1,2,3
        }
       
        public void put(int [] array){
                for(int num : array){
                        li.add(num);
                }
        }
       
       
        public void dReverse(int index){
                if(index>li.size())
                        throw new RuntimeException("已超出当前容器容量");
       
                for(int j =index+1;j<li.size();j++){
                        result.add(li.get(j));
                }
                for(int i =0;i<index;i++){
                        result.add(li.get(i));
                }
               
               
        }
       
        public void show(){
                Iterator<Integer> it = result.iterator();
                while(it.hasNext()){
                        System.out.print(it.next()+" ");
                }
        }

}
回复 使用道具 举报
黄小贝 发表于 2013-4-9 02:27
我写了两种方法,你都看看吧

谢谢,和我想要的一样,嘿嘿,要是多点注释就更好了。谢谢~
回复 使用道具 举报
谢达 发表于 2013-4-9 09:38
//不知道符不符合题意
package com.ccsu.xie.test;

删除的数不是直接给出的,如果y小于x时y就是要删除的元素,如果y大于数组x时是循环遍历数组得出要删除的元素的。还是很感谢你!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马