最近一直来研究算法,先从简单的开始,但是好像我的思维总跟不上,一直找不到根源,特来求教。
请高手指点,希望在我的源代码上改,不要偏离我的逻辑主题(面向对象的),谢谢
import java.util.TreeMap;
import java.util.TreeSet;/**
* 对数字进行排序
* 然后在给排序的数字进行区间分配
* @author Administrator
* 实现效果:
* [20002,20001]
* [8005]
* [300]
* [65,64]
* [62]
* [53,50]
* [25,20]
* [5]
* [2,1]
*
*/public class TestCompositor {
///*******************数组元素
static int []a = {1,300,20,21,22,24,25,50,51,53,23,20001,2,5,8005,65,52,64,62,20002};
//static int []a = {1,2,3,4};
//static int []a = {4,3,2,1};
///*******************计数器x
static int count = 0;
///*******************计数器y
static int countNum = 0;
// ///*******************设置二维数组
// static int [][] arr = new int[9][];
static int arr[] = new int[0];
public static void main(String[] args) {
// ///*****************定义对象变量
TestCompositor tc = new TestCompositor();
///*****************调用排序方法
tc.Compositor(a);
///*****************调用插入二维数组数据方法
tc.groupArr(a);
// ///******************把二维数组中的 数据打印出来
// for(int []a:arr){
// for(int b:a){
// System.out.print(" "+b);
// }
// }
//System.out.println(count);
//
// for(int i = 0;i<arr.length;i++){
// System.out.println(arr[i]);
// }
}
/**
* 本意是设置一个自动变长数组
* @param x 下标值
* @param i 值
* @return
*/
private int[] getArr(int x,int i){
// arr = new int[x];
// arr[x] = i;
////*******************判断传进来的值是否为空
if(Integer.valueOf(i)!=null){
////*****************定义一个替代数组
int []abs = new int[arr.length];
////*****************判断数组是否为空,不为空,则进行数组递增
////*****************为空则进行数组赋值
if(arr!=null){
for(int a =0;a<arr.length;a++){
abs[a] = arr[a];
//System.out.println(abs[a]);
}
System.out.println(" "+arr.length);
arr = new int[x+1];
for(int a =0;a<abs.length;a++){
arr[a] = abs[a] ;
}
arr[x] = i;
}else{
arr = new int[x+1];
arr[x] = i;
}
return arr;
}else{
return arr;
}
}
/**
* 插入二维数组数据的方法
* @param a
*/
private void groupArr(int[] a) {
//System.out.println(" length:"+a.length);
for(int i = 0;i<a.length-1;i++){
if(a[i]-1==a[i+1]){
System.out.print(a[i]+" ");
if(i >= a.length-2){
System.out.println(a[i+1]+" ");
//getArr(count+1,a[i+1]);
}
getArr(count,a[i]);
}else{
System.out.println(a[i]+"");
if(i > a.length-2){
System.out.println(a[i+1]);
//getArr(count+1,a[i+1]);
}
//count++;
getArr(count,a[i]);
}
count++;
};
} /**
* 行进排序的方法
* @param a
*/
private void Compositor(int []a) {
for(int i = 1;i<a.length;i++){
if(a[i]>a[i-1]){
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
};
if(comNum(a)){
return ;
}else{
Compositor(a);
};
}
/**
* 判断数组中数据的大小排列数否为顺序排列
* @param a
* @return
*/
public boolean comNum(int []a){
for(int i = 1;i<a.length;i++){
if(a[i]<a[i-1]){
if(i==a.length-1){
return true;
}
}else{
return false;
}
}
return false;
}
}
请高手指点,希望在我的源代码上改,不要偏离我的逻辑主题(面向对象的),谢谢
import java.util.TreeMap;
import java.util.TreeSet;/**
* 对数字进行排序
* 然后在给排序的数字进行区间分配
* @author Administrator
* 实现效果:
* [20002,20001]
* [8005]
* [300]
* [65,64]
* [62]
* [53,50]
* [25,20]
* [5]
* [2,1]
*
*/public class TestCompositor {
///*******************数组元素
static int []a = {1,300,20,21,22,24,25,50,51,53,23,20001,2,5,8005,65,52,64,62,20002};
//static int []a = {1,2,3,4};
//static int []a = {4,3,2,1};
///*******************计数器x
static int count = 0;
///*******************计数器y
static int countNum = 0;
// ///*******************设置二维数组
// static int [][] arr = new int[9][];
static int arr[] = new int[0];
public static void main(String[] args) {
// ///*****************定义对象变量
TestCompositor tc = new TestCompositor();
///*****************调用排序方法
tc.Compositor(a);
///*****************调用插入二维数组数据方法
tc.groupArr(a);
// ///******************把二维数组中的 数据打印出来
// for(int []a:arr){
// for(int b:a){
// System.out.print(" "+b);
// }
// }
//System.out.println(count);
//
// for(int i = 0;i<arr.length;i++){
// System.out.println(arr[i]);
// }
}
/**
* 本意是设置一个自动变长数组
* @param x 下标值
* @param i 值
* @return
*/
private int[] getArr(int x,int i){
// arr = new int[x];
// arr[x] = i;
////*******************判断传进来的值是否为空
if(Integer.valueOf(i)!=null){
////*****************定义一个替代数组
int []abs = new int[arr.length];
////*****************判断数组是否为空,不为空,则进行数组递增
////*****************为空则进行数组赋值
if(arr!=null){
for(int a =0;a<arr.length;a++){
abs[a] = arr[a];
//System.out.println(abs[a]);
}
System.out.println(" "+arr.length);
arr = new int[x+1];
for(int a =0;a<abs.length;a++){
arr[a] = abs[a] ;
}
arr[x] = i;
}else{
arr = new int[x+1];
arr[x] = i;
}
return arr;
}else{
return arr;
}
}
/**
* 插入二维数组数据的方法
* @param a
*/
private void groupArr(int[] a) {
//System.out.println(" length:"+a.length);
for(int i = 0;i<a.length-1;i++){
if(a[i]-1==a[i+1]){
System.out.print(a[i]+" ");
if(i >= a.length-2){
System.out.println(a[i+1]+" ");
//getArr(count+1,a[i+1]);
}
getArr(count,a[i]);
}else{
System.out.println(a[i]+"");
if(i > a.length-2){
System.out.println(a[i+1]);
//getArr(count+1,a[i+1]);
}
//count++;
getArr(count,a[i]);
}
count++;
};
} /**
* 行进排序的方法
* @param a
*/
private void Compositor(int []a) {
for(int i = 1;i<a.length;i++){
if(a[i]>a[i-1]){
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
};
if(comNum(a)){
return ;
}else{
Compositor(a);
};
}
/**
* 判断数组中数据的大小排列数否为顺序排列
* @param a
* @return
*/
public boolean comNum(int []a){
for(int i = 1;i<a.length;i++){
if(a[i]<a[i-1]){
if(i==a.length-1){
return true;
}
}else{
return false;
}
}
return false;
}
}
import java.util.TreeSet;
import java.util.*;/**
* 对数字进行排序
* 然后在给排序的数字进行区间分配
* @author Administrator
* 实现效果:
* [20002,20001]
* [8005]
* [300]
* [65,64]
* [62]
* [53,50]
* [25,20]
* [5]
* [2,1]
*
*/public class TestCompositor {
//???????????????既然用在主程序中用了new,为什么下面属性都是静态的?而且都把数据定死????????
///*******************数组元素
static int []a = {1,300,20,21,22,24,25,50,51,53,23,20001,2,5,8005,65,52,64,62,20002};
//static int []a = {1,2,3,4};
//static int []a = {4,3,2,1};
///*******************计数器x
static int count = 0;
///*******************计数器y
static int countNum = 0;
// ///*******************设置二维数组这个保存结果。
static Integer [][] groupArray = null;
static int arr[] = new int[0];
public static void main(String[] args) {
// ///*****************定义对象变量
TestCompositor tc = new TestCompositor();
///*****************调用排序方法
tc.Compositor(a);
///*****************调用插入二维数组数据方法
tc.groupArr(a);
for(int i=0;i<groupArray.length;i++){
System.out.println(Arrays.toString(groupArray[i]));
}
// ///******************把二维数组中的 数据打印出来
// for(int []a:arr){
// for(int b:a){
// System.out.print(" "+b);
// }
// }
//System.out.println(count);
//
// for(int i = 0;i<arr.length;i++){
// System.out.println(arr[i]);
// }
}
/**
* 本意是设置一个自动变长数组
* @param x 下标值
* @param i 值
* @return
*/
//???????????????你为什么不System.arraycopy()?????????
private int[] getArr(int x,int i){
// arr = new int[x];
// arr[x] = i;
////*******************判断传进来的值是否为空
if(Integer.valueOf(i)!=null){
////*****************定义一个替代数组
int []abs = new int[arr.length];
////*****************判断数组是否为空,不为空,则进行数组递增
////*****************为空则进行数组赋值
if(arr!=null){
for(int a =0;a<arr.length;a++){
abs[a] = arr[a];
//System.out.println(abs[a]);
}
System.out.println(" "+arr.length);
arr = new int[x+1];
for(int a =0;a<abs.length;a++){
arr[a] = abs[a] ;
}
arr[x] = i;
}else{
arr = new int[x+1];
arr[x] = i;
}
return arr;
}else{
return arr;
}
}
/**
* 插入二维数组数据的方法
* @param a
*/
//?????????????我给你写这个方法吧???????????
private void groupArr(int[] a) {
//System.out.println(" length:"+a.length);
int lianXu,i=0;
ArrayList<Integer[]> result=new ArrayList<Integer[]>();
for(;i<a.length-1;){
///假设连续数据是从第i个数据开始的。
lianXu=i;
while(lianXu<a.length-1&&a[lianXu]==a[lianXu+1]+1) lianXu++;
if(i!=lianXu){
result.add(new Integer[]{a[i],a[lianXu]});
i=lianXu+1;
}else{
result.add(new Integer[]{a[i]});
i++;
}
}
groupArray=result.toArray(new Integer[0][]);
} /**
* 行进排序的方法
* @param a
*/
//????????这个排序效太低了????
private void Compositor(int []a) {
for(int i = 1;i<a.length;i++){
if(a[i]>a[i-1]){
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
}
};
if(comNum(a)){
return ;
}else{
Compositor(a);
};
}
/**
* 判断数组中数据的大小排列数否为顺序排列
* @param a
* @return
*/
//??????????老大说这个方法不好??????改一下吧????????
public boolean comNum(int []a){
boolean isSorted=true;
for(int i = 1;i<a.length-1;i++){
if(a[i]>a[i-1]){
isSorted=false;
break;
}
}
return isSorted;
}
}
结果:
F:\java>java TestCompositor
[20002, 20001]
[8005]
[300]
[65, 64]
[62]
[53, 50]
[25, 20]
[5]
[2, 1]F:\java>