【问题标题】:How do you return an array from a method in Java如何从 Java 中的方法返回数组
【发布时间】:2014-11-01 19:45:03
【问题描述】:
private static int findLowestMark(int grade[], int lowestMark []){ 
       int holdingVariable;
       boolean sorted = false;

       while (sorted == false){
           sorted = true;
            for ( int i = 0; i < grade.length-1; i++){
               if ( grade[i] < grade[i+1]){
                   holdingVariable = grade[i+1];
                   grade[i+1] = grade [i];
                   grade[i] = holdingVariable;
                   sorted = false;
               }
            }
       }

       for (int number : grade){
           System.out.println("The sorted values are" + number); 
       }
       return grade[i];
    }

大家好,

希望你们中的某个人可以在这里帮助我,我想我已经研究了太久了,我无法弄清楚如何解决它。

基本上我要做的就是返回等级[i]。但是,当我尝试这样做时,我得到了;

找不到符号变量我编译时错误。

现在我知道这是因为我已经在 for 循环内初始化并声明了 i,所以它不能在循环外使用。

然后我想到将 for 循环更改为 while 循环并在循环之外声明 i,如下所示:

int i = 0; // altered here
while (sorted == false){
    sorted = true;
     while (i < grade.length-1){ //altered here
          i++;                    // altered here
          if ( grade[i] < grade[i+1]){
               holdingVariable = grade[i+1];
               grade[i+1] = grade [i];
               grade[i] = holdingVariable;
               sorted = false;
          }
    }
}

它似乎有效,但是当我运行程序时,排序算法不再按顺序对我的数字进行排序。

此外,我们不允许使用除扫描仪之外的任何导入库。

我对编程还是很陌生,现在可能还有 2 个月,所以如果你能在必要时用外行的术语解释事情,那就太好了。

谢谢

【问题讨论】:

  • 不用对数组排序也能找到最低分。
  • 您的方法不应该同时做两件事(找到最低标记并排序数组/返回它)。使用两种方法来做这两件事。
  • 您的问题标题具有误导性 - 您的问题只是在您致电 return grade[i] 时,i 已超出范围。
  • @FlorentBayle 不能再同意了 - 一个名为“findLowestMark”的方法不应该改变传递的数组。
  • 不清楚你到底想要什么 - 在你的问题中你声明你想从一个方法返回一个数组,但在你的解释中你想从数组中返回一个元素。你能澄清一下吗?

标签: java arrays sorting methods return


【解决方案1】:

不要返回任何东西。在java中对象的引用是按值传递的。此处对数组所做的更改将反映在其他方法中。

【讨论】:

    【解决方案2】:

    只返回排序后数组的最后一个值:

       private static int findLowestMark(int grade[], int lowestMark []){ 
    
       int holdingVariable;
       boolean sorted = false;
    
    
       while (sorted == false){
           sorted = true;
            for (int i = 0; ; i < grade.length-1; i++){
    
               if ( grade[i] < grade[i+1]){
                   holdingVariable = grade[i+1];
                   grade[i+1] = grade [i];
                   grade[i] = holdingVariable;
                   sorted = false;
               }
    
            }
       }
    
    
       for (int number : grade){
           System.out.println("The sorted values are" + number); 
       }
       return grade[grade.length-1];
    }
    

    【讨论】:

      【解决方案3】:
      private static int[] findLowestMark(int grade[], int lowestMark []){ 
         int holdingVariable;
         boolean sorted = false;
      
         while (sorted == false){
             sorted = true;
              for ( int i = 0; i < grade.length-1; i++){
                 if ( grade[i] < grade[i+1]){
                     holdingVariable = grade[i+1];
                     grade[i+1] = grade [i];
                     grade[i] = holdingVariable;
                     sorted = false;
                 }
              }
         }
      
         for (int number : grade){
             System.out.println("The sorted values are" + number); 
         }
         return grade;
      }
      

      【讨论】:

        【解决方案4】:

        尝试将“i++”移动到 while 循环的末尾? 在for循环中,“i++”将在循环中的代码之后执行。

        【讨论】:

          猜你喜欢
          • 2014-12-14
          • 1970-01-01
          • 2021-11-25
          • 2014-11-20
          • 2011-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多