谁来帮我看看这段代码啊
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仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。 --------------------编程问答--------------------
是我写的 就是问下为什么会出现这种情况 --------------------编程问答--------------------
谢谢 --------------------编程问答-------------------- 直接在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老师教授的所谓的“传值传引用”理论就可以。 --------------------编程问答-------------------- 方法内部的变量是临时副本,直接修改副本对源数据没有作用 --------------------编程问答--------------------
+1
另外,楼主函数名是想起swap吧 --------------------编程问答-------------------- [Quote=引用 2 楼 的回复:]
引用 2 楼 的回复:
我看是传值的问题,swep(int number1,int number2)
在方法结束后,number1,number2仍保留原值。方法只操作了方法里的临时变量。要想达到目的,可以放到数组里。
+1 值传递和引用传递问题. --------------------编程问答--------------------
应该是。 --------------------编程问答--------------------
应该是。 --------------------编程问答--------------------
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