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;
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;
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); } }
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
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]);
}}
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;
}}这个稍微有些麻烦
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();
}}
刚写出来的,慢慢体会吧。。
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();
}}
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 秒)
int i[] = { 18,23,42, 1, 30, 12, 14, 16, 17, 18, 19, 21 };
{
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);
}
}
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
本来说好是纯数字的,后来居然加字符串进来,就成这个样子了
数组要实现排序好再一个个add
* @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);
}