解题

答题一串数字,1,4,5,6,8,9,10,13,14,15,16怎么判断它是不是连续的,如果连续返回true,否则,false[解决办法]

答题
一串数字,1,4,5,6,8,9,10,13,14,15,16

怎么判断它是不是连续的,如果连续返回true,否则,false

[解决办法]
public static void main(String[] args) {
  String str1 = "1,2,3,4,5,6,7,8,10 ";
  String str2 = "1,2,3,4,5,6,7,8,9,10 ";
  System.out.println(isSeriateNumber(str1, ", "));
  System.out.println(isSeriateNumber(str2, ", "));
}

// 假定序列是数字顺序是升序的
// 只要获得第一值和最后一个值,通过其数值数计算一下,就可以得出是否是连的
private static boolean isSeriateNumber(String strNum, String separator) {
  String[] strNums = strNum.split(separator);
  int start = Integer.parseInt(strNums[0]);
  int end = Integer.parseInt(strNums[strNums.length-1]);
  if(start + strNums.length - 1 == end){
    return true;
  }else{
    return false;
  }
}
[解决办法]
楼上的代码不准确

如果是这样 。。。。。。。。。。。。

public class test
{
public static void main(String[] args) {
String str1 = "1,2,3,4,9,5,6,7,8,10 "; /////这里把9加到了4后面
String str2 = "1,2,3,4,5,6,7,8,9,10 ";
System.out.println(isSeriateNumber(str1, ", "));
System.out.println(isSeriateNumber(str2, ", "));
}

// 假定序列是数字顺序是升序的
// 只要获得第一值和最后一个值,通过其数值数计算一下,就可以得出是否是连的
private static boolean isSeriateNumber(String strNum, String separator) {
String[] strNums = strNum.split(separator);
int start = Integer.parseInt(strNums[0]);
int end = Integer.parseInt(strNums[strNums.length - 1]);
if (start + strNums.length - 1 == end) {
return true;
} else {
return false;
}
}

}
[解决办法]
那就改一下,增加一个排序。

public static void main(String[] args) {
  String str1 = "1,2,3,4,5,6,7,8,10 ";
  String str2 = "2,3,4,5,6,7,8,9,10 ";
  String str3 = "2,3,4,9,5,6,7,8,10 ";
  System.out.println(isSeriateNumber(str1, ", "));
  System.out.println(isSeriateNumber(str2, ", "));
  System.out.println(isSeriateNumber(str3, ", "));
}

private static boolean isSeriateNumber(String strNum, String separator) {
  String[] strNums = strNum.split(separator);
  int[] nums = new int[strNums.length];
  for(int i=0; i <strNums.length; i++) {
    nums[i] = Integer.parseInt(strNums[i]);
  }
  Arrays.sort(nums);    
  if(nums[0] + nums.length - 1 == nums[nums.length-1]){
    return true;
  }else{
    return false;
  }
}
[解决办法]
呵呵,再次订正一下,由于先前没有考虑到重复的问题,看来只能逐一进行比较了。

public static void main(String[] args) {
  String str1 = "1,2,3,4,5,6,7,8,10 ";
  String str2 = "2,3,4,5,6,7,8,9,10 ";
  String str3 = "2,3,4,5,6,7,9,8,10 ";
  String str4 = "2,4,4,5,6,7,9,8,10 ";
  String str5 = "2,3,4,5,6,7,8,10,10 ";
  System.out.println(isSeriateNumber(str1, ", "));
  System.out.println(isSeriateNumber(str2, ", "));
  System.out.println(isSeriateNumber(str3, ", "));
  System.out.println(isSeriateNumber(str4, ", "));
  System.out.println(isSeriateNumber(str5, ", "));
}

private static boolean isSeriateNumber(String strNum, String separator) {
  String[] strNums = strNum.split(separator);
  int[] nums = new int[strNums.length];
  for (int i = 0; i < strNums.length; i++) {


    nums[i] = Integer.parseInt(strNums[i]);
  }
  Arrays.sort(nums);
  for (int i = 0; i < nums.length - 1; i++) {
    if (nums[i + 1] - nums[i] != 1) {
      return false;
    }
  }
  return true;
}
[解决办法]
package com.xiongliang.part1;

public class First {

/**
* @param args
*/

public String[] string1;
public int i;

public void getSomeStr(String[] string1){
int i=string1.length;
for(int n=1;n <i;n++){
for(int m=0;m <n;m++){
int a=Integer.parseInt(string1[m]);
int b=Integer.parseInt(string1[n]);
if(a> b){
String str=string1[m];
string1[m]=string1[n];
string1[n]=str;
}
}
}
}


public boolean getResult(String[] string1){
Boolean f = null;
for(int j=0;j <=i;j++){
int c=Integer.parseInt(string1[j]);
int d=Integer.parseInt(string1[j+1]);
if((d-c)> 1){
f=false;
}
else
f=true;
}
return f;
}



public static void main(String[] args) {
String[]str=new String[]{ "1 ", "3 ", "5 ", "6 ", "8 ", "7 ", "9 ", "2 ", "4 ", "10 ", "10 "};
First f1=new First();
f1.getSomeStr(str);
if(f1.getResult(str)){
System.out.println( "是连续的 ");

}
else System.out.println( "不是连续的 ");
}

}