Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中向量中的气泡排序_Java_Sorting_Bubble Sort - Fatal编程技术网

Java中向量中的气泡排序

Java中向量中的气泡排序,java,sorting,bubble-sort,Java,Sorting,Bubble Sort,我正在创建一个程序,可以用冒泡排序方法对对象(向量)进行排序。我在互联网上找到了一个代码,它帮助我创建了它(数组中的气泡排序): 当我编译程序时,我没有得到任何语法错误,但是结果是不正确的。我想我在IF语句中犯了一个错误,但我不确定这是否是唯一的错误。下面是我运行它时得到的结果: Input number of integers to sort 5 Enter 5 integers 2 0 1 6 4 Sorted list of numbers 1 2 3 3 3 这是我的代码: impo

我正在创建一个程序,可以用冒泡排序方法对对象(向量)进行排序。我在互联网上找到了一个代码,它帮助我创建了它(数组中的气泡排序):

当我编译程序时,我没有得到任何语法错误,但是结果是不正确的。我想我在IF语句中犯了一个错误,但我不确定这是否是唯一的错误。下面是我运行它时得到的结果:

Input number of integers to sort
5
Enter 5 integers
2
0
1
6
4
Sorted list of numbers
1
2
3
3
3
这是我的代码:

import java.util.Scanner;
import java.util.*;
import java.io.*;
class BubbleSortVector {
  public static void main(String []args) {
    int n, c, d, swap;
    Scanner in = new Scanner(System.in);

    System.out.println("Input number of integers to sort");
    n = in.nextInt();

    Vector v ;
    v = new Vector();

    System.out.println("Enter " + n + " integers");

    for (c = 0; c < n; c++) 
      //v.addElement(c);
     v.insertElementAt(in.nextInt(),c);


    for (c = 0; c < ( n - 1 ); c++) {
      for (d = 0; d < n - c - 1; d++) {
        if ((Integer)v.elementAt(d) > (Integer)v.elementAt(d+1)) /* For descending order use < */

        {
          swap = (Integer)v.elementAt(d);
          v.insertElementAt(d+1,d);
          v.insertElementAt(swap,d+1);

        }
      }
    }

    System.out.println("Sorted list of numbers");

    for (c = 0; c < n; c++) 
      System.out.println(v.elementAt(c));
  }
}
import java.util.Scanner;
导入java.util.*;
导入java.io.*;
类BubbleSortVector{
公共静态void main(字符串[]args){
整数n,c,d,swap;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入要排序的整数数”);
n=in.nextInt();
向量v;
v=新向量();
System.out.println(“输入”+n+“整数”);
对于(c=0;c(整数)v.elementAt(d+1))/*用于降序使用*/
{
swap=(整数)v.elementAt(d);
v、 插入物(d+1,d);
v、 插入元件(交换,d+1);
}
}
}
System.out.println(“编号排序列表”);
对于(c=0;c
以下代码错误,在索引
d
处插入
d+1
意味着在向量中使用循环索引/计数器的值,而不是
d+1处的实际值

swap = (Integer)v.elementAt(d);
v.insertElementAt(d+1,d);    // this is incorrect, d is the index/loop counter
v.insertElementAt(swap,d+1);
将中间线改为:

v.insertElement((Integer)v.elementAt(d+1), d);
/。。。
向量v=新向量();
// ...
对于(c=0;c<(n-1);c++){
对于(d=0;dv.get(d+1)){
交换=v.get(d);
v、 集合(d,v.get(d+1));
v、 集合(d+1,交换);
}
}
}
// ...

您可以通过简单的交换方法解决此问题。循环后打印数组

        int[] Array = new int[5]{2 , 0 , 6 , 1 , 4};

        int temp = 0;
        for (int i = 0; i < Array.Length; i++)
        {
            for (int j = 0; j < Array.Length - 1; j++)
            {
                if (Array[j] > Array[j + 1])
                {
                    temp = Array[j + 1];
                    Array[j + 1] = Array[j];
                    Array[j] = temp;
                }
            }             
        }
int[]数组=新的int[5]{2,0,6,1,4};
内部温度=0;
for(int i=0;i数组[j+1])
{
温度=阵列[j+1];
数组[j+1]=数组[j];
数组[j]=温度;
}
}             
}

使用向量有什么特殊原因吗?在这种情况下这并不重要,只是好奇而已。在99.9996(我相信这是确切的数字)中,您不需要
向量
在大多数情况下,您需要的是
列表
实现,在这种情况下,我建议使用
数组列表
。同样,与错误无关。@Emz这是为了我的口试,我必须用数组和向量做一个。并做一个小演示:)你有权访问一个合适的IDE,让你为调试设置断点吗?@Coderchu我已经尝试过了,但我真的没有看到我的错误:/i我想我刚刚选出来了,看看我的答案。变量名有点混淆;)我更改了它,但当我输入与上面相同的数字时,我得到的是0 0 2 0,而不是0 1 2 4 6感谢它起作用了!我只需要将对象转换成整数:if((Integer)v.get(d)>(Integer)v.get(d+1)){和swap=(Integer)v.get(d);@petie12那么您仍然在使用原始类型。请不要这样做。@petie12,请不要将它们转换为整数,而是按照Elliott的答案,告诉
向量v
存储哪些对象。@ElliottFrisch为什么要删除您自己的答案?这不是冒泡排序。
        int[] Array = new int[5]{2 , 0 , 6 , 1 , 4};

        int temp = 0;
        for (int i = 0; i < Array.Length; i++)
        {
            for (int j = 0; j < Array.Length - 1; j++)
            {
                if (Array[j] > Array[j + 1])
                {
                    temp = Array[j + 1];
                    Array[j + 1] = Array[j];
                    Array[j] = temp;
                }
            }             
        }