有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要帮助改变模方程

我目前需要生成一个由以下元素组成的数组:

-0.5, 0, 0.5, 0, -0.5, 0, 0.5, 0...

等等。这是我当前的代码:

// Sequence: -0.5, 0, 0.5, 0, -0.5, 0, 0.5...
public static double[] generateI(int n) {
    if (n < 0) {
        return null;
    } else if (n == 0) {
        return new double[0];
    }
    double[] arr = new double[n];
    for (int i = 0; i < n; i++) {
        arr[i] = ((0.5 * i) % 2) - 0.5; \\need help here.
    }
    return arr;
}

但是,我的输出是:

[-0.5,0.0,0.5,1.0,-0.5,0.0,0.5,1.0,-0.5,0.0,0.5,1.0]

因此,我的数学方程式是错误的

(请注意,我已经尝试使用-Math.cos(i * Math.PI/2)/2方程,尽管这是一个有效的解决方案,但我的任务是在一行代码中使用模函数。)

另一个顺序(对于感兴趣的人)是:

-0, 1, 2, 3, 1, 2, 3, 4, 2, 3, 4, 5...

感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    我认为有更简单的方法

    private static final double[] doubleArray = new double[] {-0.5, 0, 0.5, 0};
        
        public static double[] generateI(int n) {
            var resArray = new double[n];
    
            for (int j = 0; j<n; j++) {
                resArray[j] = doubleArray[j % 4];
            }
            
            return resArray;
        }
    
  2. # 2 楼答案

    // Sequence: -0.5, 0, 0.5, 0, -0.5, 0, 0.5...
    public static double[] generateI(int n) {
        if (n < 0) {
            return null;
        } else if (n == 0) {
            return new double[0];
        }
        double[] arr = new double[n];
        //for (int i = 0; i < n; i++) {
        //    arr[i] = ((i % 3) - 1) * 0.5;
        //}
        Arrays.arr.setAll(i -> ((i % 3) - 1) * 0.5);
        // Correction, should be ((i%4)-1)*((i+1)%2)*0.5
        return arr;
    }
    

    有3个值,因此模为3。然后想想0,1,2应该如何映射到-0.5,0,0.5

    尼斯是Arrays

    另一个顺序我留给你自己的努力

  3. # 3 楼答案

    使用otherSequence标志更改要激活的两种模式中的哪一种

    对于您提到的第二种模式,您需要取i4的mod(返回[0, 1, 2, 3]),然后在i4之间添加整数除法的结果,以便使序列继续到接下来的4个数字(例如i = 66 / 4 = 1 -> [1, 2, 3, 4]

    class Main {
        public static double[] generateI(int n, boolean other_sequence) {
            if (n < 0) {
                return null;
            } else if (n == 0) {
                return new double[0];
            }
            double[] arr = new double[n];
    
            if (other_sequence) {
                Arrays.setAll(arr, i -> ((i % 4) + (i / 4)));
            } else {
                Arrays.setAll(arr, i -> ((i % 4) - 1) * ((i + 1) % 2) * 0.5);
            }
            return arr;
        }
    
        public static void main(String[] args) {
            System.out.println(Arrays.toString(generateI(8, false)));
            System.out.println(Arrays.toString(generateI(16, true)));
        }
    }
    

    输出:

    [-0.5, 0.0, 0.5, 0.0, -0.5, 0.0, 0.5, 0.0]
    [0.0, 1.0, 2.0, 3.0, 1.0, 2.0, 3.0, 4.0, 2.0, 3.0, 4.0, 5.0, 3.0, 4.0, 5.0, 6.0]