数组进行冒泡排序后 里面的元素再输出的时候全都变成0了 冒泡排序 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在调用bubblesort冒泡程序之前的输出是正确的,调用完成后再输出就全部为0了。检查过冒泡程序,是正确的。也就是在另外的程序中运行时 是能够正确的输出的。 你的冒泡是没错,可是你调用的是scheduler,不是bubblesort啊。。检查一下代码。没仔细看。 我还是无聊的跑了一遍,看看你变量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. 已经帮卤煮修改好了,问题在于,在外部定义的全局变量过大int[]system_task =new int[n+1];int[] user_task =new int[n+1];而在函数中产生的循环值太小,排序完成后,这两个task中的前半部分值都是0.所以你按照那个循环值只能输出0,后面有值的部分还没循环到就结束了我只是采用了一个比较简单的方法,卤煮可以再想想,优化一下。package test;public class test{ public static void main(String[] args) { int n; int task[] = {0,30,155,1,30,80,300,170,40,99, 80}; n = task.length;// int task[] = {0,30,155,80}; scheduler(task, n); } public static void scheduler(int[] task,int n){ //将数组task中的数按照范围的要求放在两个数组里面。 int m = 0; int k = 0; for(int i=0;i<n;i++){ if(task[i]<50){ m++; //system_task[m++] = task[i]; }else if(task[i]>=50&&task[i]<=255){ //user_task[k++] = task[i]; k++; }else { continue; } } /* * 此处为新加内容 * */ /////////////////////////////////////////////// int[]system_task = new int[m]; int[] user_task = new int[k]; System.out.println(m+"&"+k); for(int i=0,a=0,b=0;i<n;i++){ if(task[i]<50){ system_task[a++] = task[i]; }else if(task[i]>=50&&task[i]<=255){ user_task[b++] = task[i]; }else { continue; } } ///////////////////////////////////////////////// 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; } }//////////////////TEST result5&50 30 1 30 40 155 80 170 99 80 0 1 30 30 40 80 80 99 155 170 java solr 搜索引擎 关键字 部分匹配无结果 求一个家庭理财管理系统 大家都来谈谈软件外包公司的情况吧(对欧美的) 帮忙解决2个简单问题,没分了,最后的20分拿出来 新手请教一下~如何让 jtable中的某一行失去选中状态 关于取得java程序的返回值问题。 如何在窗体组件中(如JPanel)加载.swf动画? 能不能简要比较下java和c#(想转c#了) 如何连接到一个servlet 关于JButton的小问题 java中数组可以直接强转为对象吗?大家看这个代码,我有疑惑 string 转 Long
检查过冒泡程序,是正确的。也就是在另外的程序中运行时 是能够正确的输出的。
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.
int[]system_task =new int[n+1];
int[] user_task =new int[n+1];
而在函数中产生的循环值太小,排序完成后,
这两个task中的前半部分值都是0.所以你按照那个循环值只能输出0,后面有值的部分还没循环到就结束了
我只是采用了一个比较简单的方法,卤煮可以再想想,优化一下。package test;
public class test{
public static void main(String[] args) {
int n;
int task[] = {0,30,155,1,30,80,300,170,40,99, 80};
n = task.length;
// int task[] = {0,30,155,80}; scheduler(task, n);
} public static void scheduler(int[] task,int n){
//将数组task中的数按照范围的要求放在两个数组里面。
int m = 0;
int k = 0;
for(int i=0;i<n;i++){
if(task[i]<50){
m++;
//system_task[m++] = task[i];
}else if(task[i]>=50&&task[i]<=255){
//user_task[k++] = task[i];
k++;
}else {
continue;
}
}
/*
* 此处为新加内容
*
*/
///////////////////////////////////////////////
int[]system_task = new int[m];
int[] user_task = new int[k];
System.out.println(m+"&"+k);
for(int i=0,a=0,b=0;i<n;i++){
if(task[i]<50){
system_task[a++] = task[i];
}else if(task[i]>=50&&task[i]<=255){
user_task[b++] = task[i];
}else {
continue;
}
}
/////////////////////////////////////////////////
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;
}
}//////////////////TEST result
5&5
0 30 1 30 40
155 80 170 99 80
0 1 30 30 40
80 80 99 155 170