当前位置:编程学习 > JAVA >>

谁来帮我看看这段代码啊

package com.zhang.day3;

import java.util.Arrays;

public class TestBubbleDemo {
public static void main(String[] args) {
int[] array = {1, 7, 3, 0, 8,2,5,9,4};
System.out.println(Arrays.toString(array));
bubble(array);
System.out.println(Arrays.toString(array));
}

public static void bubble(int[] array){
for (int i = 0; i < array.length - 1; i++) {
boolean flag = true;
for (int j = array.length - 1; j > i; j--) {
System.out.println(j);
swep(array[j - 1], array[j]);
flag = false;
}
if(flag)return;
}
}

public static void swep(int number1, int number2){
if(number1 > number2){
int temp;
temp = number1;
number1 = number2;
number2 = temp;
}
}
}

问下为什么将交换的判断条件number1>number2放在swep函数中,在bubble函数中调用它时它不能达到交换的结果啊,求教啊啊,在线坐等大神啊 --------------------编程问答-------------------- 这不是楼主写的代码吗?不能交换,就不用这种方式啊,楼主在纠结什么呢? --------------------编程问答-------------------- 我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。 --------------------编程问答--------------------
引用 1 楼  的回复:
这不是楼主写的代码吗?不能交换,就不用这种方式啊,楼主在纠结什么呢?



是我写的  就是问下为什么会出现这种情况 --------------------编程问答--------------------
引用 2 楼  的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。



谢谢     --------------------编程问答-------------------- 直接在bubble里判断就行。

import java.util.Arrays;

public class TestBubbleDemo
{
public static void main(String[] args) 
{
int[] array = {1, 7, 3, 0, 8,2,5,9,4};
System.out.println(Arrays.toString(array));
bubble(array);
System.out.println(Arrays.toString(array));
}

public static void bubble(int[] array)
{
for (int i = 0; i < array.length - 1; i++)
{
for (int j = array.length - 1; j > i; j--) 
{
System.out.println(j);
if(array[j-1]>array[j])
{
int temp=array[j-1];
array[j-1]=array[j];
array[j]=temp;
}
}
}
}
}
--------------------编程问答-------------------- 传值肯定没有用啊,你要把数组名传进去 --------------------编程问答-------------------- 楼主如果非要将交换位置写成一个方法的话 最好传的是数组的下标。这样的话才能达到要求

我测试过了
import java.util.Arrays;

public class TestBubbleDemo {
public static void main(String[] args) {
int[] array = { 1, 7, 3, 0, 8, 2, 5, 9, 4 };
System.out.println(Arrays.toString(array));
bubble(array);
System.out.println(Arrays.toString(array));
}

public static void bubble(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
boolean flag = true;
for (int j = array.length - 1; j > i; j--) {
System.out.println(j);
swep(array, j - 1, j);//串的是数组的下标
flag = false;
}
if (flag)
return;
}
}
public static void swep(int[] a, int number1, int number2) {

if (a[number1] > a[number2]) {
int temp;
temp = a[number1];
a[number1] = a[number2];
a[number2] = temp;
}
}
}

--------------------编程问答-------------------- 楼主,这个其实是Java的设计者的思路,涉及到享元模式、栈内存、堆内存、引用、基本类型的设计模式等许多知识,如果对这个问题想追根溯源,加我QQ 422766572 给你解释哈
如果就想会简单的应用,不需要知道原理,在程序中跑不会报错,那遵循大学里面那些SB老师教授的所谓的“传值传引用”理论就可以。 --------------------编程问答-------------------- 方法内部的变量是临时副本,直接修改副本对源数据没有作用 --------------------编程问答--------------------
引用 2 楼  的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。

+1
另外,楼主函数名是想起swap吧 --------------------编程问答-------------------- [Quote=引用 2 楼  的回复:]

引用 2 楼  的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。

+1    值传递和引用传递问题. --------------------编程问答--------------------
引用 2 楼  的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。

应该是。 --------------------编程问答--------------------
引用 2 楼  的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。

应该是。 --------------------编程问答--------------------
import java.util.Arrays;

public class TestBubbleDemo {
    
    public static void main(String[] args) {
        int[] array = {1, 7, 3, 0, 8, 2, 5, 9, 4};
        System.out.println(Arrays.toString(array));
        bubble(array);
        System.out.println(Arrays.toString(array));
    }
    
    public static void bubble(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            boolean flag = true;
            for (int j = array.length - 1; j > i; j--) {
                System.out.println(j);
                array[j - 1] = array[j - 1] ^ array[j];
                array[j] = array[j] ^ array[j - 1];
                array[j - 1] = array[j - 1] ^ array[j];
                flag = false;
            }
            if (flag) {
                return;
            }
        }
    }
}


swep多余的, 直接换位就可以了, 交流一下~
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,