【问题标题】:Assign an array from method [closed]从方法分配一个数组[关闭]
【发布时间】:2015-05-19 11:03:35
【问题描述】:

我正在尝试对数组进行排序,但在尝试为其赋值时遇到问题,我该如何解决?

这是给数组赋值的方法

public void Sort1() {
    for (int i = 0; i < numStudent; i++) {
        x[i] = student[i].getScore(0);
    }
    int tampung;
    for (int i = 0; i < numStudent; i++) {
        for (int j = 0; j < numStudent - (i + 1); j++) {
            if (x[j] > x[j + 1]) {
                tampung = x[j];
                x[j] = x[j + 1];
                x[j + 1] = tampung;
            }
        }
    }
}

我想从这里获取数组

public int getScore(int i){
    return test[i-1];
}

【问题讨论】:

  • 这将抛出一个ArrayIndexOutOfBoundsException,因为使用0 参数调用getScore()
  • 你在哪里初始化数组?你在哪里定义 test[]?
  • 你有什么“问题”?添加一些细节...
  • 问题是当我尝试初始化数组时。它不起作用,我认为当我尝试初始化 x[] 的值时出现问题
  • 谢谢你们的回复,现在我可以修复它了,我不需要将 test[] 的值分配给 x 但我只需要调用它然后对其进行排序。 ty

标签: java arrays methods assign


【解决方案1】:

只需使用 Java 排序方法,带有 Comparator。 (假设您希望根据学生的分数对学生进行排序)

    Arrays.sort(students, new Comparator<Student>(){
         public int compare(Student sd1, Student sd2) {
        return sd1.getScore(0).compareTo(sd2.getScore(0));
    }); 

【讨论】:

    【解决方案2】:

    简单的bubble sorting检查链接,您不需要嵌套for-loop,而是继续直到没有发生交换,这意味着数组的排序顺序正确。

    while ( flag )
    {
        flag = false;
        for( j=0;  j < numStudent -1;  j++ )
        {
            if ( x[ j ] > x[j+1] )   // change to < for descending sort
            {
                tampung = x[ j ];                //swap elements
                x[ j ] = x[ j+1 ];
                x[ j+1 ] = tampung;
                flag = true;
            } 
        }
    }
    

    【讨论】:

    • 从什么时候开始在冒泡排序中使用简单循环?
    • 您是在暗示冒泡排序不需要嵌套循环吗?这意味着它的复杂性是O(n),这意味着它将是现有的最佳排序算法(这有点不正确,因为该算法是最慢的算法之一)。
    • 不,我说你不需要嵌套 2 个 for 循环
    • 现在看起来好多了。
    • 我正在编辑以适应 OP 的需要,而不是简单地复制粘贴...抱歉延迟...顺便说一句,具有O(n) 复杂性的排序算法会很棒... xD跨度>
    【解决方案3】:
    x[i] = student[i].getScore(0);
    

    这不应该被称为

     x[i] = student[i].getScore(i);
    

    完整的代码应该是这样的。

    public void Sort1() {
    for (int i = 1; i <= numStudent; i++) {
        x[i] = student[i].getScore(i);
    }
    int tampung;
    for (int i = 0; i < numStudent; i++) {
        for (int j = 0; j < numStudent - (i + 1); j++) {
            if (x[j] > x[j + 1]) {
                tampung = x[j];
                x[j] = x[j + 1];
                x[j + 1] = tampung;
            }
        }
    }
    }
    
    public int getScore(int i){
        return test[i-1];
    }
    

    【讨论】:

    • 这如何回答这个问题?
    • 我已经编辑了答案,这不是现在的问题吗?
    • 其实我不知道。这个问题不是很清楚。
    • 是的......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多