【问题标题】:How verify that 3 numbers in sequence are equals? [duplicate]如何验证序列中的 3 个数字是否相等? [复制]
【发布时间】:2019-08-17 13:15:53
【问题描述】:

我必须检查任何数字的序列是否相等。用户将提交一个序列,如果数字按顺序重复,他就赢得了一些积分。

而赢得积分的顺序是三个。例如: 1 3 4 4 4 5 他赢了分数,因为他输入了 3 个数字 4 的序列。

它在向量上的数字序列。向量的大小,也是用户给定的。

for (int i = 0; i < M.length; i++) {
            if (M[i] == M[i + 1] && M[i + 1] == M[i+2]) {
                if (L[i] == L[i + 1] && L[i + 1] == L[i + 2]) {
                    ValuePoint = 0;
                } else {
                    PExtraM = i;
                    ValuePoint = 30;
                }

Scanner sc1 = new Scanner(System.in);

        R = sc1.nextInt();

        int M[] = new int[R];
        int L[] = new int[R];

        for (int i = 0; i < M.length; i++) {
            M[i] = sc1.nextInt();
        }

        for (int i = 0; i < L.length; i++) {
            L[i] = sc1.nextInt();
        }


//The problem It's here ************************************


        for (int i = 0; i < M.length; i++) {
            if (M[i] == M[i + 1] && M[i + 1] == M[i+2]) {
                if (L[i] == L[i + 1] && L[i + 1] == L[i + 2]) {
                    ValuePoint = 0;
                } else {
                    PExtraM = i;
                    ValuePoint = 30;
                }

线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 5 在 maratona.Maratona2.main(Maratona2.java:37) Java 结果:1

【问题讨论】:

  • 你知道变量“i”可以有的最大值是M.length - 1,因此你不能访问M[i + 1]和M[i + 2],因为这些索引是当 i = M.length - 1 时,在数组之外。
  • 为什么要将输入分成 2 个数组?

标签: java arrays if-statement


【解决方案1】:

i

现在让我们假设你说的向量的长度是 5 好吗? 现在我的循环将一直运行到 i 小于 5,对吗? 现在转到您的下一个代码:

if (M[i] == M[i + 1] && M[i + 1] == M[i+2])

我们取i的值为

4(假设)

实际上小于 5 并且循环条件满足。 但是看下一段代码,就变成了

M[4]==M[5]&& ==M[6]

显然,由于给定 Vector 的长度是 5,我的最后一个元素的索引将是 4。 所以在那之后 **5 & 6 ** 将只显示空值。 这就是为什么它在 5 处说 ArrayIndexOutOfBounds 异常错误。 希望这会有所帮助!

【讨论】:

    【解决方案2】:

    你的循环变量我必须停在 m.length-3

       (i <m. length-2)
    

    有 i+1=m.length-2 和 i+2=m.length-1

    但在您的情况下,您尝试访问 i+1=m.length 和 i+2= m.length+1 在最后两次迭代中都超出范围

    【讨论】:

      【解决方案3】:

      正如其他人已经说过的那样,您超出了数组的边界。您需要提前停止循环 2 以防止。

      你可能想使用类似的东西:

          int sequenceLength = 3;
          for (int i = 0; i <= M.length - sequenceLength; i++) {
              boolean correct = true;
              for (int j = 0; j < sequenceLength && (correct = (M[i] == M[j+i])); j++);
      
              if (correct){
                  ValuePoint = 0;
              } else {
                  PExtraM = i;
                  ValuePoint = 30;
                  break;
              }
          }
      

      【讨论】:

      • 这解决了问题。我想这样做。谢谢您的帮助。问题在于数组边界的大小。它要变成 6,但大小是 5。
      猜你喜欢
      • 2018-10-03
      • 2021-02-13
      • 2020-01-02
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      相关资源
      最近更新 更多