Java 算术序列程序

Java 算术序列程序,java,sequence,Java,Sequence,我想编写一个程序序列,读取任意数量的命令行int并将它们存储在数组中。 然后,程序在数组中查找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 sta

我想编写一个程序序列,读取任意数量的命令行int并将它们存储在数组中。 然后,程序在数组中查找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);
                    }
                }
            }
        }   
    }
}

你有两个主要问题:

  • 您不是打印找到的数字,而是打印它们的索引。您需要更改
    System.out.println(a+“”+b+“”+c)
    系统输出打印项次(arr[a]+“”+arr[b]+“”+arr[c])
  • 您的索引不正确。对于从第二个开始的每个索引,最终会得到三次相同的数字,这总是构建一个序列 以下是正确的代码:

    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]);
                        }
                    }
                }
            }
        }
    }
    
    公共类序列{
    公共静态void main(字符串[]args){
    // 20 8 27 19 10 56 7 12 98
    int[]arr=新int[args.length];
    对于(int i=0;i
    您有两个主要问题:

  • 您不是打印找到的数字,而是打印它们的索引。您需要更改
    System.out.println(a+“”+b+“”+c)
    系统输出打印项次(arr[a]+“”+arr[b]+“”+arr[c])
  • 您的索引不正确。对于从第二个开始的每个索引,最终会得到三次相同的数字,这总是构建一个序列 以下是正确的代码:

    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]);
                        }
                    }
                }
            }
        }
    }
    
    公共类序列{
    公共静态void main(字符串[]args){
    // 20 8 27 19 10 56 7 12 98
    int[]arr=新int[args.length];
    对于(int i=0;i
    您想要的是在a+1处开始索引b,在b+1处开始索引c,以避免使用某些数字的双精度。虽然我必须说,你打印的序列实际上是正确的,因为“5”是一个算术序列。添加这一微小的变化将导致:

    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
                }
            }
        }
    }
    
    
    }
    }
    
    公共类序列{
    公共静态void main(字符串[]args){
    int[]arr=新int[args.length];
    对于(int i=0;i
    您想要的是在a+1处开始索引b,在b+1处开始索引c,以避免使用某些数字的双精度。虽然我必须说,你打印的序列实际上是正确的,因为“5”是一个算术序列。添加这一微小的变化将导致:

    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
                }
            }
        }
    }
    
    
    }
    }
    
    公共类序列{
    公共静态void main(字符串[]args){
    int[]arr=新int[args.length];
    对于(int i=0;i
    您可以发布当前实际打印的内容吗?比如当您执行%JavaSequence208271910105671298时,当前代码会发生什么?请看:。@bpgeck是的,我编辑了。你能发布当前实际打印的内容吗?比如当您执行%JavaSequence208271910105671298时,当前代码会发生什么?请看:。@bpgeck是的,我编辑过