我想编写一个在数组中查找三个数字的程序,该程序给出长度为三的算术序列-如果b-a = c-b,则三个数字a,b和c构成长度为3的算术序列。

问题在于,即使在应有的情况下,他的代码也不会显示“是”,如果这样,它也永远不会进入命令。我想在为b-a = c-b编写数学命令时遇到问题。

public static void main (String[] args)  {
    int [] a = new int [args.length - 1];W
    for (int i = 0; i<a.length; i++) {
       a[i] = Integer.parseInt(args[i+1]);
     }
    for (int i = 0; i < a.length - 2; i++) {
       for (int j = i+1; j < a.length - 1; j++) {
          int b = a[i];
          for (int k = j + 1; k < a.length; k++) {
             int c = a[k];
             if (b - a[i] == c - b) {
               System.out.println("yes");
                break;
             }
           }
         }
       }
     }
   }

最佳答案

我认为这是您想要的:



变化:


首先对数组进行排序
当您脱离最内层的循环时,
    还必须打破所有外部循环(下面的检查代码)




Arrays.sort(a);

outerLoop:
for (int i = 0; i < a.length - 2; i++) {

    for(int j = i+1; j < a.length - 1; j++){

        for(int k = j+1; k < a.length; k++){

            if(a[j] - a[i] == a[k] - a[j]){
                System.out.println("yes");
                break outerLoop;
            }

        }

    }

}


更新:
由于以下代码,您缺少数组的第一个元素:

int [] a = new int [args.length - 1]
for (int i = 0; i<a.length; i++) {
       a[i] = Integer.parseInt(args[i+1]);
     }


更改为:

int [] a = new int [args.length]
for (int i = 0; i<a.length; i++) {
       a[i] = Integer.parseInt(args[i]);
     }

关于java - 如何检查算术序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33706326/

10-11 02:20