【问题标题】:Return statement confusion返回语句混乱
【发布时间】:2015-03-18 02:14:47
【问题描述】:

我想知道为什么 return iBiggest 没有在 if 语句中引用 iBiggest。有没有办法我可以做到?我的总体目标是返回数组中包含最大总和的行。数组是二维的。

public static int findMaxRow(int[][] arr){

        int curMax=0;
        //int iBiggest;


        for (int i=0; i < arr.length; i++){

            int curSum = 0;

            for (int j=0; j < arr[i].length; j++){


                arr[i][j]+= curSum;

                if (curSum>curMax){
                    curSum=curMax;

                    int iBiggest = i;

                }

              }

            }

        return iBiggest;
        }

【问题讨论】:

  • 这可以编译吗?如果是这样,iBiggest 的 other 声明在哪里?

标签: java arrays methods return


【解决方案1】:

我通常在方法的顶部声明我的变量,这样就不会发生这样的事情。您需要将变量放在 for 之外,以便 return 语句可以“看到”它。希望这会有所帮助!

public static int findMaxRow(int[][] arr){

        int curMax=0;
        int iBiggest = 0;
        int curSum = 0;


        for (int i=0; i < arr.length; i++){

            curSum = 0;

            for (int j=0; j < arr[i].length; j++){


                arr[i][j]+= curSum;

                if (curSum>curMax){
                    curSum=curMax;

                    iBiggest = i;

                }

              }

            }

        return iBiggest;
        }

【讨论】:

    【解决方案2】:

    看看this tutorial。在那里您将了解到您必须在 for 循环之外声明 iBiggest:

    // function header
    {
        int curMax   = 0;
        int iBiggest = 0; 
    
        for (int i = 0; i < arr.length; i++){
    
            int curSum = 0;
            for (int j = 0; j < arr[i].length; j++){
    
                arr[i][j]+= curSum;
    
                if (curSum > curMax){
                    curSum   = curMax;
                    iBiggest = i;
                }
            }
        }
        // Has iBiggest to be declared inside the same scope!
        return iBiggest;
    }
    

    【讨论】:

    • 有道理,感谢您的帮助以及教程链接!
    • 不客气。顺便提一句。如果需要,您可以通过单击投票按钮下方来接受答案。接受可接受的答案是一种很好的做法,以便让人们知道答案已经解决了您的问题。 :)
    【解决方案3】:

    您需要扩大变量的范围,以便从您想要返回它的位置可见。因为您想在for 循环之外返回它,所以它应该在外面声明:

             int iBiggest = 0;
             int curMax=0;
    
    
            for (int i=0; i < arr.length; i++){
    
                int curSum = 0;
    
                for (int j=0; j < arr[i].length; j++){
    
    
                    arr[i][j]+= curSum;
    
                    if (curSum>curMax){
                        curSum=curMax;
    
                        iBiggest = i;
    
                    }
    
                  }
    
                }
    
            return iBiggest;
            }
    

    【讨论】:

      猜你喜欢
      • 2020-09-08
      • 1970-01-01
      • 2012-01-07
      • 2014-02-19
      • 1970-01-01
      • 2015-08-06
      • 1970-01-01
      • 2021-06-17
      • 2015-08-05
      相关资源
      最近更新 更多