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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张胜格 中级黑马   /  2013-1-1 10:50  /  2315 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张胜格 于 2013-1-4 09:23 编辑

有一个数组里面存放的是有序的数字比如:
[1,2,4,5,7,8,9]
要求写一个方法把连续的数字放到一个数组中。
得到的结果为:
[1,2]
[4,5]
[7,8,9]

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 张会文 于 2013-1-1 13:11 编辑

方法有3:
1.使用for循环语句逐个复制数组里的元素到对相应数组。
2.使用System类中的静态方法arrayCopy。
System.arrayCopy(source,0,target,0,source.length)
我这用方法二写了一个程序:
  1. public class Shuzu {
  2.         /*有一个数组里面存放的是有序的数字比如:
  3.           [1,2,4,5,7,8,9]
  4.          要求写一个方法把连续的数字放到一个数组中。
  5.          得到的结果为:
  6.          [1,2]
  7.          [4,5]
  8.          [7,8,9]*/
  9.         public static void main(String[]args){
  10.                 int []array1={1,2,4,5,6,7,8,9};
  11.                 int []array2=new int[2];
  12.                 int []array3=new int[2];
  13.                 int []array4=new int[3];
  14.                 System.arraycopy(array1,0,array2,0,2);
  15.                 System.arraycopy(array1,2,array3,0,2);
  16.                 System.arraycopy(array1,4,array4,0,3);
  17.                 for(int s1:array2){
  18.                         System.out.print(s1);
  19.                 }
  20.                 for(int s2:array3){
  21.                         System.out.print(s2);
  22.                 }
  23.                 for(int s3:array4){
  24.                         System.out.print(s3);
  25.                 }
  26.         }
  27.        

  28. }
复制代码
3.使用clone方法复制数组

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
张会文 发表于 2013-1-1 11:46
方法有3:
1.使用for循环语句逐个复制数组里的元素到对相应数组。
2.使用System类中的静态方法arrayCopy。

好像我没说清楚,我想知道的是给方法传递一个数组,方法的作用是将数组中的连续数字拆分出来。[1、2、4、5、7、8、9]这个数组只是一个列子。
回复 使用道具 举报
int [] a={1,2,3,4,5,6,7}
int[] i=a.toIntArray[]
回复 使用道具 举报
本帖最后由 高一航 于 2013-1-1 14:59 编辑

这是我刚想的办法(详情在注释里) :
想了半天 觉得这个办法最好了 ...
  1. package heima.test;

  2. import java.util.Arrays;

  3. public class Test {

  4.     /*
  5.      * @param 黑马程序员
  6.      * 有一个数组里面存放的是有序的数字比如:[1,2,4,5,7,8,9]要求写一个方法把连续的数字放到一个数组中。得到的结果为:
  7.      * [1,2][4,5][7,8,9]
  8.      *
  9.      * @author 高一航
  10.      */
  11.     public static void main(String[] args) {
  12.         int[] home = new int[] { 1, 2, 4, 5, 7, 8, 9 };
  13.         fun(home);
  14.     }

  15.     public static void fun(int[] home) {
  16.         int index = 0;// 截取home的开始位置
  17.         int length = 1;//所要截取的长度
  18.         int[] arr; //新的数组
  19.         for (int i = 1; i < home.length; i++) {  //逐一遍历home数组
  20.             if (home[i] == home[i - 1] + 1) {  //如果和前面的数连续则将长度加一
  21.                 length++;
  22.             } else {  //读到不连续的数字了,则输出前面连续的几个数
  23.                 arr = new int[length]; //实例化要截取的新数组
  24.                 System.arraycopy(home, index, arr, 0, length);  //将原数组从index开始截取length长度,复制到arr数组.
  25.                 String s = Arrays.toString(arr);
  26.                 System.out.print(s); //输出截取到的新数组
  27.                 index = index + length;  //截取位置初始化
  28.                 length = 1; //截取长度初始化
  29.             }
  30.         }
  31.         
  32.         //下面是为了打印最后一次截取到的arr数组
  33.         arr = new int[length];
  34.         System.arraycopy(home, index, arr, 0, length);
  35.         String s = Arrays.toString(arr);
  36.         System.out.println(s);
  37.     }

  38. }
复制代码
输出:



代码都是一个一个手敲的...给点技术分支持吧~


评分

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

查看全部评分

回复 使用道具 举报
[code]
//可以参考字符串匹配算法
class Dispart
{

未命名.jpg (7.74 KB, 下载次数: 46)

未命名.jpg
回复 使用道具 举报

  1. //可以参考字符串匹配算法
  2. class Dispart
  3. {
  4.         int cnt=0;                //用于判断连续时用
  5.         int index= 0;
  6.         int[]st;
  7.         Dispart(int len){        st = new int[2*len];        }        //分配所需要拆开的数组空间的2倍,防止空间不足
  8.         void Disp(int a[])
  9.         {
  10.                 int j=0,i;
  11.                 lab:
  12.                 for ( i=0;i< a.length; i+=cnt)
  13.                 {
  14.                         j = i;
  15.                         cnt = 0;
  16.                         while(true)
  17.                         {
  18.                                 if (j==a.length)
  19.                                         break lab;
  20.                                 if (a[i]+cnt==a[j])                //如果相等  例如:a[i]=1  a[j]=1   那么j++ a[j]=2 cnt++ ,cnt=1
  21.                                 {                                                //                a[i]+cnt==a[j]继续,否则偏移cnt个
  22.                                        
  23.                                         st[index] = a[j];
  24.                                         cnt++;
  25.                                         j++;
  26.                                         index++;
  27.                                 }
  28.                                 else{
  29.                                         st[index++] = -1;                //-1用于分隔用
  30.                                         break;
  31.                                 }
  32.                         }
  33.                 }
  34.                 i=0;
  35.                 while(st[i]!=0)
  36.                 {
  37.                         if (st[i]==-1)
  38.                         {
  39.                                 System.out.println();
  40.                         }
  41.                         else
  42.                                 System.out.print(st[i]);
  43.                         i++;
  44.                 }
  45.                
  46.         }
  47.        
  48. }
  49. class DispartDemo
  50. {
  51.         public static void main(String []args)
  52.         {
  53.         //        Array a = new Array[10];
  54.                 int []a = {1,2,4,5,7,8,9};
  55.                 Dispart d = new Dispart(a.length);
  56.                 d.Disp(a);
  57.         }
  58. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马