ArrayIndexOutOfBound异常在冒泡排序中

时间:2017-06-22 19:05:28

标签: java indexoutofboundsexception bubble-sort

当运行以下方法时,它会在第179行抛出ArrayIndexOutOfBoundsException,这是嵌套循环中的if语句。

我认为它与j-1的索引有关。所以我把-1拿出来,在括号中只有j,但它在交换的第一行抛出相同的异常。我已经找到了泡泡排序语法,从我能说的是我很好。我知道,我结束了。有什么建议来解决这个问题

public static void bubbleSort(int[]array1){
    int temp = 0;

    for(int i = 0; i < array1.length; i++){
        for(int j = 0; j < (array1.length - i); j++){
            if(array1[j-1] > array1[j]){
                //swap
                temp = array1[j-1];
                array1[j-1] = array1[j];
                array1[j] = temp;
            }
        }
    }
}

4 个答案:

答案 0 :(得分:0)

j = 0因为当时j-1 = -1,因此您遇到此错误的唯一问题就是这种情况。这不是java中的有效索引值,因此 arrayIndexOutOfBounds 异常。我已经对代码进行了必要的更改。请查看下面的代码段。

public static void bubbleSort(int[]array1){

            int temp = 0;
                for(int i = 0; i < array1.length; i++){
                    for(int j = 0; j < (array1.length - i-1); j++){
                        if(array1[j] > array1[j+1]){
                            //sawp
                            temp = array1[j];
                            array1[j] = array1[j+1];
                            array1[j+1] = temp;

答案 1 :(得分:0)

数组的第一个元素是0.使用j-1得到-1,这不在数组的范围内。

你试图把&#34; j&#34;。但是,我认为你把&#34; j + 1&#34;比较。并且由于&#34; j + 1&#34;而抛出了arrayIndexOutOfBounds异常。

尝试在第二个循环中使用它:

(array1.length - i - 1)

答案 2 :(得分:0)

您正在获得此异常,因为您已启动j = 0并执行j-1。在这种情况下,它会超出界限,从而给出例外。下面的代码可以正常工作。

list = []
table = driver.find_element_by_tag_name('tbody')
tr = table.find_elements_by_tag_name('tr')

for i in tr:
    if i.find_elements_by_xpath("""//a[contains(@href, 'thing1')]"""):
        name = i.find_elements_by_xpath("""//a[contains(@href, 'thing1')]""")[1]
        text = name.text
        list.append(text)

    if i.find_elements_by_xpath("""//a[contains(@href, 'thing2')]"""):
        link = i.find_element_by_xpath("""//a[contains(@href, 'thing2')]""")
        link_text = link.text
        list.append(link_text)
        address = link.get_attribute('href')
        list.append(address)

答案 3 :(得分:0)

对于j = 0时内循环的第一次迭代,j-1变为-1,arr [-1]为索引超出绑定异常。 现在当你在条件

中将j-1更改为j时

if(array1 [j-1]&gt; array1 [j])// j-1到j

仍然在第一行交换arr [j-1]是arr [-1],它会使索引超出绑定异常。

请遵循以下代码以避免索引超出范围的异常。 从1开始j迭代。

`public static void bubbleSort(int[]array1){
    int temp = 0;
    for(int i = 0; i < array1.length; i++){
        for(int j = 1; j < (array1.length - i); j++){ //initialize j=1 instead 0
            if(array1[j-1] > array1[j]){
                //sawp
                temp = array1[j-1];
                array1[j-1] = array1[j];
                array1[j] = temp;
            }
        }
    }
}`