【问题标题】:BubbleSort for Object type of array is not working perfectly对象类型数组的 BubbleSort 无法正常工作
【发布时间】:2021-04-16 12:50:04
【问题描述】:

我想问一下冒泡排序(Java)

这是我的代码

Object[] bubbled = {"LMAO", 3.48 ,2.3 ,3.61 ,3.16 ,3.56 ,2.9 ,3.99 ,4.87 ,3.91};
for(int pass=1 ; pass<bubbled.length-1;pass++){
            for(int i=1;i<bubbled.length-1-pass;i++){
                if(Double.parseDouble(String.valueOf(bubbled[i]))> 
                    Double.parseDouble(String.valueOf(bubbled[i+1]))){
                    float hold= Float.parseFloat(String.valueOf(bubbled[i]));
                    bubbled[i] = bubbled[i+1];
                    bubbled[i+1] = hold;
                } 
            }
        }

数组是Object[] 类型。我希望它从bubbled[1] 开始,因为bubbled[0] 是非数字值。 它会在流程结束时进行排序,但不会对我的最后 3 个索引进行排序。

例如:

之前:3.48 ,2.3 ,3.61 ,3.16 ,3.56 ,2.9 ,3.99 ,4.87 ,3.91

之后:2.3 ,2.9 ,3.16,3.48 ,3.56, 3.61 ,3.99, 4.87 ,3.91

谁能指出问题所在?

【问题讨论】:

  • 在我看来,这是一个学习使用调试器的好机会。你试过了吗?
  • 不要转换成字符串再转换成​​双精度来比较数值:检查它们是否数值(使用例如instanceof Number),然后转换成对到Number 并使用.doubleValue() 进行比较。除此之外,您还可以通过使用float 来存储hold 值来更改此处的值。

标签: java arrays sorting bubble-sort


【解决方案1】:

您没有通过数组进行足够多的传递。

for(int pass = 0; pass < bubbled.length; pass++){

【讨论】:

    【解决方案2】:

    您的代码是正确的,但您忘记了每个 for 循环中的最后一次迭代。 将你的 for 循环更改为:

    for(int pass=1 ; pass<bubbled.length;pass++){
                for(int i=1;i<bubbled.length-pass;i++){
    

    这应该可以正常工作

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 2013-11-20
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多