【问题标题】:Longest sequence of same numbers in array list数组列表中相同数字的最长序列
【发布时间】:2017-01-22 01:04:17
【问题描述】:

我正在尝试执行此操作,以便打印出相同数字的最长序列。我刚刚编辑了它,但它告诉我要放置一个 return statement 。这是我的代码:

public class A1Q3 {
    private static int getLongestRun(int[] array){ 
        int count = 1; 
        int max = 1;

        for (int i = 1; i < array.length; i++) {
            if (array[i] == array[i - 1]) {
                 count++;
            } else {
                 count = 1;
            }
              if (count > max){
                  max = count;
        }   
    }

     public static void main(String[] args) { 
         int[] array = new int[]{5, 6, 6, 45, -2, -9, 56};
         System.out.println(getLongestRun(array));
     }    
}

【问题讨论】:

  • "我对它不太自信" - 你不必这样:只需在几个示例上运行它,看看它是否有效(提示:它没有)。跨度>
  • 当某个数字不是之前的数字时,您的计数将重置为 1。您需要将任意点的最长计数保存到另一个变量 currentMax 和之后 count++ if(count&gt;currentMax) currentMax=count; 最后您将在 `currentMax`` 中获得最大值
  • 有一个代码审查堆栈交换社区,您可以在其中发布此问题。
  • @VHS 不,他不能,你只能在那里查看 working 代码。上面的代码甚至没有编译。请在发布之前阅读 SO 网站的帮助中心(或向他人提供建议)
  • 在下面更新了我的答案,包括如何让代码工作以及修复逻辑错误。

标签: java arraylist


【解决方案1】:

您缺少 getLongestRun() 函数和 return 语句的右括号。您想返回 max 变量。

另外,代替

System.out.println(count);

试试:

System.out.println(getLongestRun(array));

实际使用您创建的功能。但是,您的功能仍然不正确。您正在返回当前的连续计数,而不是最长的连续计数。您在连胜结束后正确地将计数重置为 1,但除了当前连胜之外,您还需要另一个名为 max 的变量来存储总最大值。

【讨论】:

  • 其实代码并没有返回任何东西,这也是它不编译的原因。
  • 它还缺少 getLongestRun() 函数的右括号。我会补充的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-16
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多