【问题标题】:Java Array program to implement bubble sortJava Array 程序实现冒泡排序
【发布时间】:2013-07-21 22:20:48
【问题描述】:

所以我对编程很陌生。我参加了一个在线课程,我理解我输入的代码,但是它不能正常工作。我经常收到“索引越界”错误,这是没有意义的,因为我只保留了 0-4 的 5 个值。你能找出问题所在吗?谢谢!

public class LEGGO
{
public static void main(String args[])
{
    int j, i, l, m;
    int This[] = new int[5];
    This[0] = 8;
    This[1] = 4;
    This[2] = 24;
    This[3] = 14;
    This[4] = 56;
    for (j=1; j<5; j++)
    {
        for(l=0; l<5-j; l++)
        {
            if (This[l]<This[l+1])
            {
                i=This[l];
                This[l]=This[l+1];
                This[l+1]=i;
            }
        }
    }
    for(m=0; m<5; m++);
        System.out.print(This[m]);
    }
}

【问题讨论】:

    标签: bubble-sort


    【解决方案1】:

    您的堆栈跟踪将告诉您导致异常的行。

    编辑:问题是for循环末尾的分号和缺少'{'。当你执行 m++ 时,它会将 m 递增到 5,然后在你的 println 中使用。

    您还可以通过缩小变量范围来避免这些类型的问题。如果你在 for 循环中初始化 m,它就不会在下一行的范围内。

    此外,为了更好的可读性,请遵循 java 代码约定: http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

    【讨论】:

      【解决方案2】:

      在最后一个 for 循环声明之后有一个分号,将其删除,它将起作用....

      for(m=0; m<5; m++)
      

      【讨论】:

        【解决方案3】:

        欢迎来到编程,希望你喜欢挑战。

        您犯了语法错误。 for(m=0; m 行实际上应该是 for(m=0; m 你错过了右大括号 } .

        这很不走运,因为这意味着程序的行为与您预期的非常不同 - 但 java 编译器正在按照它的指示进行操作。

        在 java(和许多其他编程语言)中,分号表示“语句结束”。这意味着因为您在 for 循环之后放置了一个,所以发生的情况是它只是执行 for 循环而不做任何其他事情。这意味着变量 m 最多计数为 5。完成后,程序继续尝试读取数组 -> This[m]This[5] .由于数组 This 有五个元素长,并且数组从零开始计数,元素 This[4] 是数组的最后一个元素。

        我已经使用 cmets 来标记程序中的右大括号,以便更容易看出哪里出了问题。如果您使用 java IDE,则可以更轻松地查看此类问题。

        然而,这是一堂可疑的编程课——虽然它确实教你如何使用数组和 for 语句,但人们早就认识到你不应该这样编码,因为它会导致这类问题。虽然不是初学者的编程主题,但有经验的程序员使用 [Java 集合的 api] (http://docs.oracle.com/javase/7/docs/technotes/guides/collections/overview.html) 可以避免犯这个错误。

        public class LEGGO{
            public static void main(String args[]){
                    int j, i, l, m;
                    int This[] = new int[5];
                    This[0] = 8;
                    This[1] = 4;
                    This[2] = 24;
                    This[3] = 14;
                    This[4] = 56;
        
                    for (j=1; j<5; j++){
                        for(l=0; l<5-j; l++){
                                if (This[l]<This[l+1]){
                                    i=This[l];
                                    This[l]=This[l+1];
                                    This[l+1]=i;
                                }// end if 
                        } //end for l
                    } //end for j
        
                    for(m=0;m<5;m++){
                        System.out.print(This[m]);
                    }// end for m
            }//end main
        }//end class
        

        快乐的 java hacking。

        【讨论】:

        • 注意:这个让我热泪盈眶。 1989 年工程计算 101 单元的任务是在 VAX 上用 Fortrean 编写冒泡排序。
        猜你喜欢
        • 1970-01-01
        • 2012-07-23
        • 2017-03-11
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 2014-06-25
        相关资源
        最近更新 更多