如:现有一数组 int i[]={2,1,3,5,6,7,8,10,12,14,16,17,18,19,21};
要得到类似1-3,5-8,10,12,14,16-19,21这样的结果,用java怎么写呀?

解决方案 »

  1.   

    import java.util.Arrays;
    public class cha { /**
     * @param args
     */
    public static void main(String[] args) {
    int[] a={2,1,3,5,6,7,8,10,12,14,16,17,18,19,21};
    Arrays.sort(a);
    if(a[0]+1 != a[1])
    System.out.print(a[0]+",");
    else System.out.print(a[0]+"-");

    for(int i = 1 ; i < a.length-1 ; i++){
    if((a[i]-1 != a[i-1])&(a[i]+1 != a[i+1]))
    System.out.print(a[i]+",");
    else if((a[i]-1 ==a[i-1])&(a[i]+1 != a[i+1]))
    System.out.print(a[i]+",");
    else if((a[i]-1 ==a[i-1])&(a[i]+1 == a[i+1]))
    System.out.print("");
    else System.out.print(a[i]+"-");
    }

    System.out.print(a[a.length-1]);
     
    }}
      

  2.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Vector;public class test7 {
    public static int shu=0;
    public Vector<Integer> a=new Vector<Integer>();
    public static Vector<String> vector=new Vector<String>();
    public static void main(String[] args) throws IOException{
    test7 t=new test7();
    t.input();
    int min=t.getMin();
    System.out.print("断点是:");
    t.getDuan(min);
    System.out.println("重复的是:"+t.Repate());
    }

    public void  input() throws IOException{
    BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));//转化为字符
    String str=null;
    while((str=bf.readLine())!=null){
    if(str.equals("")){
    break;
    }
    String[] str1=str.split(" ");
    for(int i=0;i<str1.length;i++){
    vector.add(str1[i]);

    }

    }

    for(int k=0;k<vector.size();k++){
    a.add( Integer.parseInt(vector.get(k)));
    // System.out.println(a.get(k));
    }
    bf.close();
    }public  int getMin(){
    int min=a.get(0);
    for(int i=1;i<a.size();i++){
    if(min>a.get(i))
    min=a.get(i);
    }
    return min;

    }
    public  void getDuan(int min){
    // System.out.println("min="+min);
    for(int i=min;i<min+a.size();i++){
    int temp=havaDuan(a,i);
    // System.out.println("temp="+temp);
    if(temp!=-1){

    System.out.println(temp);
    break;
    }
    }


    }public int havaDuan(Vector a ,Integer temp){
    for(int i=0;i<a.size();i++){
    if(temp==a.get(i)){

    return -1;
    }
    }
    return temp;

    }
    public  int Repate(){
    for(int i=0;i<a.size();i++){

    for(int j=0;j<a.size();j++){
    if((i!=j)&&a.get(i)==a.get(j))
    return a.get(i);
    }
    }
    return 0;

    }}这个稍微有些麻烦
      

  3.   

    import java.util.ArrayList;
    import java.util.Arrays;public class Demo {
    public static void main(String[] args) {
    int i[] = { 2, 1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 17, 18, 19, 21 };
    // 先来个排序好的数组
    int[] j = order(i);
    // 连续的数字就用-连起来
    System.out.println(change(j));
    } /*
     * 如:现有一数组 int i[]={2,1,3,5,6,7,8,10,12,14,16,17,18,19,21};
     * 要得到类似1-3,5-8,10,12,14,16-19,21这样的结果,用java怎么写呀?
     */
    public static int[] order(int[] i) {
    // 对接受的数组排序
    int x = 0;
    while (i[x] > i[x + 1]) {
    int temp;
    temp = i[x];
    i[x] = i[x + 1];
    i[x = 1] = temp;
    x++;
    }
    return i;
    } // 连续的数字就用-连起来
    public static String change(int[] j) {
    StringBuffer sb = new StringBuffer();
      
    ArrayList<Integer> list = new ArrayList<Integer>();
      for (int i = 0; i < j.length; i++) {
      list.add(j[i]);
      }
    int index=0 ;
    int end;
    for (int x=0;x<j.length;x++){
    int c = j[x]+1;
    if (list.contains(c)){
    continue;
    }else{
    end=x;

    if(index==x){
    sb.append(j[index]+",");
    index++;
    continue;
    }
    sb.append(j[index]+"-"+j[end]+",");
    index=end+1;
    continue;
    }
    }
    return sb.toString();
    }}
    刚写出来的,慢慢体会吧。。
      

  4.   

    import java.util.ArrayList;
    import java.util.Arrays;public class Demo {
    public static void main(String[] args) {
    int i[] = { 2, 1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 17, 18, 19, 21 };
    // 先来个排序好的数组
    int[] j = order(i);
    // 连续的数字就用-连起来
    System.out.println(change(j));
    } /*
     * 如:现有一数组 int i[]={2,1,3,5,6,7,8,10,12,14,16,17,18,19,21};
     * 要得到类似1-3,5-8,10,12,14,16-19,21这样的结果,用java怎么写呀?
     */
    public static int[] order(int[] i) {
    // 对接受的数组排序
    int x = 0;
    while (i[x] > i[x + 1]) {
    int temp;
    temp = i[x];
    i[x] = i[x + 1];
    i[x+1] = temp;
    x++;
    }
    return i;
    } // 连续的数字就用-连起来
    public static String change(int[] j) {
    StringBuffer sb = new StringBuffer();
      
    ArrayList<Integer> list = new ArrayList<Integer>();
      for (int i = 0; i < j.length; i++) {
      list.add(j[i]);
      }
    int index=0 ;
    int end;
    for (int x=0;x<j.length;x++){
    int c = j[x]+1;
    if (list.contains(c)){
    continue;
    }else{
    end=x;

    if(index==x){
    sb.append(j[index]+",");
    index++;
    continue;
    }
    sb.append(j[index]+"-"+j[end]+",");
    index=end+1;
    continue;
    }
    }
    return sb.toString();
    }}
      

  5.   

     public static void main(String[] args) {
            int i[] = {2, 1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 17, 18, 19, 21};
            Arrays.sort(i);
            List<String> values = new ArrayList<String>();
            int start = i[0];//记录每一个连续的第一个数
            int begin = i[0];
            for (int j = 1; j < i.length; j++) {
                if (begin + 1 == i[j] && j != i.length - 1) {
                    begin = i[j];
                    continue;
                }
                begin = i[j];
                if (start == begin || (start != begin && start == i[j - 1])) {//没有连续的,只有一个数
                    values.add(String.valueOf(start));
                } else if (j == i.length - 1 && i[j - 1] == begin - 1) { //最后一组连续
                    values.add(String.valueOf(start) + "-" + String.valueOf(i[j]));
                } else { //最后一组不连续
                    values.add(String.valueOf(start) + "-" + String.valueOf(i[j - 1]));
                    if (j == i.length - 1) {
                        values.add(String.valueOf(i[j]));
                    }
                }
                start = begin;
            }
            System.out.println(values);
        }run:
    [1-3, 5-8, 10, 12, 14, 16-19, 21]
    成功构建 (总时间: 0 秒)
      

  6.   

    不能实现排序吧。本例比较特殊,如果是类似这样的数组则完全失败:
    int i[] = { 18,23,42, 1, 30, 12, 14, 16, 17, 18, 19, 21 };
      

  7.   

    import java.lang.*;class Test
    {
    public static void main(String[] args)
    {
    int a[] = {2,1,3,5,6,7,8,10,12,14,16,17,18,19,21};
    StringBuffer sb = new StringBuffer();

    Test t = new Test();
    t.parse(sb,a);
    System.out.print(sb);
    }
    void parse(StringBuffer sb,int[] a)
    {
    int max = 0;
    for (int i=0;i<a.length;i++)
    {
    if (a[i]>max)
    max = a[i];
    }
    int [] t = new int[max+1];
            for (int i=0;i<a.length;i++)
    {
    t[a[i]] = 1;
    }
    int start = 0;
    int len = 0;
    for (int i=0;i<t.length;i++)
    {
    if (t[i] != 0)
    {
    if (len == 0)
    start = i;
    len++;
    }
    else
    {
    if (len == 1)
    sb.append(start).append(',');
    else if (len > 1)
    sb.append(start).append('-').append(start+len-1).append(',');
    len = 0;
    }
    }
    if (len == 1)
    sb.append(start).append(',');
    else if (len > 1)
    sb.append(start).append('-').append(start+len-1).append(',');
    sb.deleteCharAt(sb.length()-1);
    }
    }
      

  8.   

    public class OrderedJoiner {
    private StringBuffer sb = new StringBuffer();
    private Object b;
    private Object e;
    private Integer begin;
    private Integer end; private void join() {
    sb.append(b);
    if (end != begin) {
    sb.append("-").append(e);
    }
    } private void add(int i, Object o) {
    if (begin == null) {
    e = b = o;
    end = begin = i;
    } else if (i - end <= 0) {
    } else if (i - end == 1) {
    e = o;
    end = i;
    } else {
    join();
    sb.append(",");
    e = b = o;
    end = begin = i;
    }
    } public void add(int i) {
    add(i, i);
    } public void add(String s) {
    int i = StringUtils.parseInt(StringUtils.find(s, "\\d+")); // 本地方法:获取字符串中的数字
    add(i, s);
    } @Override
    public String toString() {
    join();
    return sb.toString();
    }
    }
    public class Test {
    public static void main(String[] args) throws Exception {
    OrderedJoiner joiner = new OrderedJoiner();
    joiner.add(1);
    joiner.add(2);
    joiner.add(3);
    joiner.add(5);
    joiner.add(6);
    joiner.add(8);
    joiner.add("a9");
    joiner.add("a10");
    joiner.add("11a");
    joiner.add("12b");
    joiner.add("c13");
    joiner.add("d14");
    joiner.add("d19");
    joiner.add("d20");
    joiner.add("55");
    joiner.add("56");
    System.out.println("joiner = " + joiner);
    }
    }
    输出:joiner = 1-3,5-6,8-d14,d19-d20,55-56
      

  9.   

    以前也碰到一个这么样的需求,帮别人写的
    本来说好是纯数字的,后来居然加字符串进来,就成这个样子了
    数组要实现排序好再一个个add
      

  10.   

    数字之间要用空格而不是逗号隔开;import java.util.*;public class LianXuShu { /**
     * @param args
     * @author yuyue
     */
    LianXuShu() {
    System.out.println("input numbers:");
    str = in.nextLine();
    st = str.split(" ");
    num = new int[st.length];
    for (int i = 0; i < st.length; i++) {
    num[i] = Integer.parseInt(st[i]);
    }
    System.out.println(Arrays.toString(num));
    } void Fenxi() {
    mm = new MaxMin();
    mm.setMax(num[0]);
    mm.setMin(num[0]);
    for (int i = 1; i < num.length; i++) {
    if ((num[i] < mm.getMax() + 2) && (num[i] > mm.getMin() - 2)) {
    mm.setMax(num[i] == mm.getMax() + 1 ? num[i] : mm.getMax());
    mm.setMin(num[i] == mm.getMin() - 1 ? num[i] : mm.getMin());
    if(i == num.length - 1)
    System.out.print(mm.getMin() + "  " + mm.getMax() + ";");
    } else {
    System.out.print(mm.getMin() + "  " + mm.getMax() + ";");
    mm.setMax(num[i]);
    mm.setMin(num[i]);
    if(i == num.length - 1)
    System.out.print(mm.getMin() + "  " + mm.getMax() + ";");
    }
    }
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    new LianXuShu().Fenxi();
    } private Scanner in = new Scanner(System.in);
    private String str = null, st[];
    private int num[];
    private MaxMin mm;
    }class MaxMin {
    MaxMin() {
    } void setMax(int a) {
    max = a;
    } void setMin(int b) {
    min = b;
    } int getMax() {
    return max;
    } int getMin() {
    return min;
    } private int max;
    private int min;
    private Scanner in = new Scanner(System.in);
    }