【问题标题】:Bubble pop using boolean in java.在 java 中使用布尔值弹出气泡。
【发布时间】:2014-02-08 00:08:21
【问题描述】:
import java.util.*;

public class Zhangbubble
{
    public static void main (String[] args)
    {
        int Bub[] = new int[6];
        Random randy = new Random();
        boolean Done = false;
        for (int x=0; x<6; x++)
        {
            Bub[x] = randy.nextInt(100);
            System.out.println (Bub[x]);
        }
            System.out.println ("This is the original array");
            while (! Done)
            {
                Done = true;
                for (int x = 0; x<Bub.length-1; x++)
                {
                if(Bub[x+1] > Bub[x])
                {
                    int temp = Bub[x];
                    Bub[x] = Bub[x+1];
                    temp = Bub[x+1];
                    Done = false;
                }
                else
                {
                    Done = false;
                }

            }
            for(int x = 0; x<6; x++)
            {
                System.out.print(Bub[x]+" ");
            }
        }

    }
}

所以我的编程老师要求我们在 java 中使用布尔值进行冒泡排序。他的示例显示了带有 for 循环的 while 循环中的代码。假设此代码连续排序,直到数组中的数字从最小到最大组织。但是,我真的迷路了,我似乎无法弄清楚我哪里出错了。任何帮助将不胜感激!

【问题讨论】:

  • 作为提示,您可能希望在代码中遵循 Java 约定——变量名的首字母小写,只有后续单词的首字母大写,例如testGears——见docs.oracle.com/javase/tutorial/java/nutsandbolts/…。可能想让你的小家伙复数并给它一个更具描述性的名字。这不仅有助于那些试图提供帮助的人的可读性,而且在接下来的几个月里对你自己也有帮助 - 更少的事情要弄清楚。
  • 您是否尝试过使用调试器单步执行代码和/或插入带有变量值的频繁打印语句?我认为您将通过这种方式了解更多信息,然后尝试从 Stack Overflow 中获得答案。
  • 您是否尝试过使用调试器?在你的代码中设置一些断点,然后单步执行,看看它实际上做了什么。对我来说,不用看太久,看起来在 if 和 else 中 done 都设置为 false,所以它永远不会完成?
  • @jeff_kile 大智若愚! :D
  • 我尝试调试它,我发现它并没有交换两个数字,而是开始吐出一个数字,所以如果我从六个数字的随机链开始,它最终会变成一个链超过六个具有相同值或多次出现的不同值的数字。

标签: java for-loop while-loop boolean bubble-sort


【解决方案1】:

问题在于您的切换算法。您正在分配 temp 两次。

 int temp = Bub[x];
            Bub[x] = Bub[x+1];
            temp = Bub[x+1]; //Here should assign Bub[x+1] to temp
            //Example: Bub[x+1] = temp

edit-实际上,排序算法本身也可能有一些改进。就个人而言,我喜欢这样做:

public class Sort {
    private static int[] array = { 3, 8, -1, 7, 0, 3 };

    public static void main(String[] args) {

        for(int i = 0; i < array.length - 1; i++) {
            for(int j = i + 1; j < array.length; j++) {

                if(array[i] > array[j]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }

        for(int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

【讨论】:

  • 我试过了,但它所做的只是 java 告诉我它导致“缺乏精确度”
【解决方案2】:

这个工作

 public static void main(String[] args) {


   int Bub[] = new int[6];
    Random randy = new Random();
    boolean Done = false;
    for (int x=0; x<6; x++)
    {
        Bub[x] = randy.nextInt(100);
        System.out.println (Bub[x]);
    }
        System.out.println ("This is the original array");
        while ( ! Done)
        {

            for (int x = 0; x<Bub.length-1; x++)
            {
            if(Bub[x+1] > Bub[x])
            {
                int temp = Bub[x];
                Bub[x] = Bub[x+1];
                Bub[x+1]=temp ;
                Done = false;
            }
            else
            {
                Done = false;
            }

        }
        for(int x = 0; x<6; x++)
        {
            System.out.print(Bub[x]+" ");
        }
         Done = true;
    }


}

【讨论】:

  • 是的。我有那个代码,一开始几乎完全一样,但它只是不起作用。代码看起来正确,但它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
相关资源
最近更新 更多