日期:2014-05-20  浏览次数:20797 次

数组进行冒泡排序后 里面的元素再输出的时候全都变成0了
public class test1_1 {


public static void main(String[] args) {
int i = 0, j = 0, t = 0, n;
int task[] = {0,30,155,1,30,80,300,170,40,99, 80};
n = task.length;
int[]system_task =new int[n+1];
int[] user_task =new int[n+1];

// int task[] = {0,30,155,80};

scheduler(task, n, system_task, user_task);


}

public static void scheduler(int[] task,int n,int[] system_task,int[]user_task){
             //将数组task中的数按照范围的要求放在两个数组里面。
int m = 0;
int k = 0;
for(int i=0;i<n;i++){
if(task[i]<50){                                 
system_task[m++] = task[i];
}else if(task[i]>=50&&task[i]<=255){
user_task[k++] = task[i];
}else {
continue;
}
}
System.out.println(m+"&"+k);
for(int i=0;i<m;i++){
System.out.print(system_task[i]+" ");//对数组进行处理完成后输出仍然是对的,但是当用冒泡完成后
                                                                                        //再输出就不对了。已经检查冒泡程序了,是对的。

}
System.out.println();
for(int i=0;i<k;i++){
System.out.print(user_task[i]+" ");
}
System.out.println();
int[]system_task1 = bubblesort(system_task);
int[] user_task1 = bubblesort(user_task);
for(int i=0;i<m;i++){
System.out.print(system_task1[i]+" ");
}
System.out.println();
for(int i=0;i<k;i++){
System.out.print(user_task1[i]+" ");
}
   //出问题了。
System.out.println();

/*for(int i=0;i<n;i++){
for(int i1=0;i1<m;i1++){
if(system_task[i1]==task[i]){
system_task[i1]=i;
}
}
}

for(int i=0;i<n;i++){
for(int i1=0;i1<k;i1++){
if(user_task[i1]==task[i]){
user_task[i1]=i;
}
}
}
system_task[m++]=-1;
user_task[k++]=-1;

for(int i=0;i<m;i++){
System.out.print(system_task[i]+" ");
}
System.out.println();
for(int i=0;i<k;i++){
System.out.print(user_task[i]+" ");
}*/
}

public static int[] bubblesort(int[] a){
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-i-1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
return a;
}

}

------解决方案--------------------
写这么多。。调试看看呢
------解决方案--------------------
我还是无聊的跑了一遍,看看你变量m和k的大小,以及数组的大小,你就明白了。。。。。你冒泡把初始为0 的元素都排前面去,而数组大小是12,m是5,k也是5。。。。
------解决方案--------------------
我也无聊的跑了一下。。

for (int i = 0; i < n; i++) {  //n=11
if (task[i] < 50) {
system_task[m++] = task[i];
} else if (task[i] >= 50 && task[i] <= 255) {
user_task[k++] = task[i];
} else {
continue;
}
}

for (int i : user_task) {
System.out.println("user_task"+i);
}

for (int i : system_task) {
System.out.println("system_task"+i);
}

System.out.println(m + "&" + k);

我在你的System.out.println(m + "&" + k);这一句之前打印了一下你的数组。因为你的数组定义的是定长的,你除了放进的数之外,其余的都默认为0了,你排序从小到大,前面好多0,所以你只看到了前面的0.