算术序列程序

时间:2015-11-10 20:56:16

标签: java sequence

我想编写一个程序Sequence,它读取任意数量的命令行整数并将它们存储在一个数组中。 然后程序在数组中查找3个数字,形成长度为3的算术序列。

例如:

% java Sequence 20 8 27 19 10 56 7 12 98 
The numbers 8, 10, 12 located at indices 1, 4, 7 form an arithmetic sequence

这是我的代码,但它不起作用:

public class Sequence {

    public static void main(String[] args){

        int[] arr = new int[args.length];

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

        // Process
        for(int a = 0; a < arr.length; a++){
            for(int b = 1; b < arr.length; b++){
                for(int c = 2; c < arr.length; c++){
                    if (arr[b] - arr[a] == arr[c] - arr[b]){
                        System.out.println(a + " " + b + " " + c);
                    }
                }
            }
        }   
    }
}

当我运行它时,它显示了我:

1 4 7
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8

2 个答案:

答案 0 :(得分:2)

您有两个主要问题:

  1. 您不打印您找到的数字,而是打印它们的索引。您需要将System.out.println(a + " " + b + " " + c);更改为System.out.println(arr[a] + " " + arr[b] + " " + arr[c]);
  2. 您的索引不正确。对于第二个开启的每个索引,最终得到相同的数字三次,这总是构建一个序列。
  3. 这是正确的代码:

    public class Sequence {
        public static void main(String[] args){
    
            // 20 8 27 19 10 56 7 12 98
            int[] arr = new int[args.length];
    
            for(int i = 0; i < arr.length; i++){
                arr[i] = Integer.parseInt(args[i]);
            }
    
            for(int a = 0; a < arr.length; a++){
                for(int b = a + 1; b < arr.length; b++){
                    for(int c = b + 1; c < arr.length; c++){
                        if (arr[b] - arr[a] == arr[c] - arr[b]){
                            System.out.println(arr[a] + " " + arr[b] + " " + arr[c]);
                        }
                    }
                }
            }
        }
    }
    

答案 1 :(得分:2)

你想要的是在a + 1处开始索引b和在b + 1处索引c以避免使用某些数字加倍。虽然我必须说,你打印的序列实际上是正确的,因为&#34; 5 5 5&#34;是一个算术序列。添加这个小小的变化会导致:

public class Sequence {

public static void main(String[] args){

int[] arr = new int[args.length];

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

// Process
for(int a = 0; a < arr.length; a++){
    for(int b = a+1; b < arr.length; b++){
        for(int c = b+1; c < arr.length; c++){
            if (arr[b] - arr[a] == arr[c] - arr[b]){
                System.out.println(arr[a] + " " + arr[b] + " " + arr[c]);
                //print the sequence and not the index
            }
        }
    }
}


}
}