求Java编程代码

题目:假设数组{1 2 3 78 34 33 16 35},1)按照从大到小进行排序输出 2)当多个数为连续数时,只输出其中最大的和最小的数。如该数组就应输出为78 35 33 16 3 1.求高手代码交流学习哈。

import java.util.Arrays;


public class Test {


public static void main(String[] args) {
int[] arr={1,2 ,3 , 78 ,  34 ,  33 , 16 , 35};

Arrays.sort(arr);
for(int i=arr.length-1;i>=0;i--){
System.out.print(arr[i]+"\t");
}
System.out.println();
int a=0;
for(int i=arr.length-1;i>=0;i--){
if(i>0&&a==arr[i]&&arr[i]-arr[i-1]==1){
continue;
}
if(i>0&&arr[i]-arr[i-1]==1){
a=arr[i-1];
System.out.print(arr[i]+"\t");

}else{
System.out.print(arr[i]+"\t");
}
}

}

}

追问

可以描述一下多个连续数只输出其中最大最小的算法过程么

追答

如果是连续的数,就把下一个数先保存到a中,如果下个数和a是相等的就跳过

这样会准确点
import java.util.Arrays;


public class Test {

public static void main(String[] args) {
int[] arr={1,2 ,3 , 78 , 34 , 77, 33 ,33, 16 ,1,0, 35,0};

Arrays.sort(arr);//排序
for(int i=arr.length-1;i>=0;i--){
System.out.print(arr[i]+"\t");
}
System.out.println();
int a=-1000;//定义a
for(int i=arr.length-1;i>=0;i--){
//第二步:a和这个数(其实就是上次循环的第二个数)相比,还是相差为1或相等就跳过此处循环
if(i>0&&a==arr[i]&&(arr[i]-arr[i-1]==1||arr[i]-arr[i-1]==0)){
a=arr[i-1];//更新a的值
continue;
}
if(i>0&&(arr[i]-arr[i-1]==1||arr[i]-arr[i-1]==0)){//第一步:如果这个数和下一个数是相差为1或为0,则把第二个数保存到a中
a=arr[i-1];
System.out.print(arr[i]+"\t");//输出连续的数最大或最小的

}else{//不是连续的数
System.out.print(arr[i]+"\t");
}

}

}

}

温馨提示:答案为网友推荐,仅供参考
相似回答