【问题标题】:Java parameter passing int[][]Java 参数传递 int[][]
【发布时间】:2010-11-19 00:01:23
【问题描述】:

我正在尝试用 java 编写一个简单的 DCT 算法。我希望我的 findDCT 方法有一个像这样的整数数组作为参数:

public class DCT {
    private Random generator = new Random();
    private static final int N = 8;
    private int[][] f = new int[N][N];
    private double[] c = new double[N];

    public DCT() {
        this.initializeCoefficients();
    }

    private void initializeCoefficients() {
        int value;

        // temporary - generation of random numbers between 0 and 255 
        for (int x=0;x<8;x++) {
            for (int y=0;y<8;y++) {
              value = generator.nextInt(255);
              f[x][y] = value;
              System.out.println("Storing: "+value+" in: f["+x+"]["+y+"]");
            }
        }

        for (int i=1;i<N;i++) {
            c[i]=1/Math.sqrt(2.0);
            System.out.println("Storing: "+c[i]+" in: c["+i+"]");
        }
        c[0]=1;
    }

    public double[][] applyDCT() {
        double[][] F = new double[N][N];
        for (int u=0;u<N;u++) {
              for (int v=0;v<N;v++) {
                double somme = 0.0;
                for (int i=0;i<N;i++) {
                  for (int j=0;j<N;j++) {
                    somme+=Math.cos(((2*i+1)/(2.0*N))*u*Math.PI)*Math.cos(((2*j+1)/(2.0*N))*v*Math.PI)*f[i][j];
                  }
                }
                somme*=(c[u]*c[v])/4;
                F[u][v]=somme;
              }
            }
        return F;
    }
}

现在,我将如何声明此方法并能够将 'int[][] f' 作为参数传递,而不是使用声明为私有变量并在当前类的构造函数中初始化的 f[][] ?

【问题讨论】:

    标签: java parameters parameter-passing table-valued-parameters dct


    【解决方案1】:

    如何提取initializeCoefficients 并更改构造函数

    public DCT() {
        this.initializeCoefficients();
    }
    

    public DCT(int[][] f) {
        this.f = f;
    }
    

    然后你可以像这样使用类

    double[][] dctApplied = new DCT(yourTwoDimF).applyDCT();
    

    另外,我不会像你那样使用N。在应用 DCT 时,我会查看 f 本身的尺寸。

    也就是说,我会改变

        double[][] F = new double[N][N];
        for (int u=0;u<N;u++) {
              for (int v=0;v<N;v++) {
                  // ...
    

    类似

        double[][] F = new double[f.length][];
        for (int u = 0; u < f.length; u++) {
              F[u] = new double[f[u].length];
              for (int v=0;v<N;v++) {
                  // ...
    

    【讨论】:

    • 感谢您的快速回复!我同意你的观点,我应该对 f 的维度更加灵活。但是,我不明白你为什么这样做:
    • F[u] = new double[f[u].length];
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 2022-01-15
    • 2013-12-16
    • 2016-11-22
    相关资源
    最近更新 更多