黑马程序员技术交流社区
标题:
排序打印
[打印本页]
作者:
demown
时间:
2014-4-17 17:33
标题:
排序打印
本帖最后由 demown 于 2014-4-17 18:38 编辑
你们看看这段代码 的打印结果吧。
public class ChaBiao {
public static void main(String[] ages){
int[] arr={12,23,3,5,4,9,6,7,8};
for(int x=0;x<arr.length;x++){
System.out.print(arr[x]+",");
}
sum(arr);
sop(arr);
//for(int x=0;x<arr.length;x++){
//System.out.print(arr[x]+",");
//}
}
public static void sop(int[] arr){
for(int x=0;x<arr.length-1;x++){
System.out.print(arr[x]);
}}
public static void sum(int[] arr){
int cishu=0;
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
temp=arr[x];
}
}
}System.out.print("cishu="+cishu+";");
}}
上面是没有把x和y换位置 所以打印出来的是
12,23,3,5,4,9,6,7,8,cishu=0;3,3,3,4,4,6,6,7,8,
我知道是因为没有交换位置 但是为啥能打印出来这个结果我知道拿错了 是想让你们解释一下怎么得到的找个结果分析一下
作者:
呆呆沙师妹
时间:
2014-4-17 17:51
public static void sop(int[] arr){
for(int x=0;x<arr.length;x++){ //这里x < arr.length - 1会导致少打印一个数组元素问题
System.out.println(arr[x]);
}}
public static void sum(int[] arr){
int cishu=0;
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp; //temp = arr[x]错了。arr[y]没有将arr[x]的值接收过来,也就是说凡是比arr[y]大的arr[x]值都被替换为arr[y]了。
}
}
复制代码
作者:
天山
时间:
2014-4-17 18:33
public static void bubble_sort(int arr[])
{
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1;j++){
if(arr[j]>arr[j+1]){
int t=arr[j];
arr [j]=arr[j+1];
arr[j+1]=t;
}
}
} 最后 你要把 你程序的 temp=arr[x]; 改成 arr[y]=temp, 你没有交换成功
作者:
igi9009
时间:
2014-4-17 19:00
帮你做了一些修改,数组换位那里出了点问题,下面的程序就没问题了
public static void main(String[] ages){
int[] arr={12,23,3,5,4,9,6,7,8};
for(int x=0;x<arr.length;x++){
System.out.print(arr[x]+",");
}
System.out.println(); //这里加多一个换行好看点
sum(arr);
sop(arr);
}
public static void sop(int[] arr){
for(int x=0;x<arr.length;x++){
System.out.print(arr[x]+",");
}}
public static void sum(int[] arr){
int cishu=0;
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp; //这里要这样写才能成功换位置成功
cishu++; //这里每次换位置就加一
}
}
}
System.out.println("cishu="+cishu+";"); //这里加换行
}
复制代码
作者:
四川男人
时间:
2014-4-17 21:51
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
temp=arr[x];//这里出了问题,上面已经将arr[ y ]的值给了arr[ x ],而arr[ y ]的值是没有得到交换的
//应该改成 arr[ y ] = temp;
}
作者:
雀巢咖啡
时间:
2014-4-17 22:34
public class ChaBiao {
public static void main(String[] ages){
int[] arr={12,23,3,5,4,9,6,7,8};
for(int x=0;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}
sum(arr);
sop(arr);
}
public static void sop(int[] arr){
for(int x=0;x<arr.length-1;x++)
{
System.out.print(arr[x]);
}
}
public static void sum(int[] arr)
{
int cishu=0;
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++){
if(arr[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;// 注意:temp=arr[x]; 这样写的话是起不到调换位置的作用的
cishu++;//当数组中的数据发生了交换,则cishu+1,所以cishu的值会变化。
}
}
}
System.out.print("cishu="+cishu+";");
//还有,你的大括号的书写很不规范,这样会让阅读者感觉很吃力。
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2