当前位置: 首页 > 知识库问答 >
问题:

得到了两种方法,用相同的数组,用sane公式转换数组元素。方法返回不同的值

百里秋月
2023-03-14
private static final int SIZE = 10000000;
private static final int h = SIZE/2;
  private static float[] method1() {
    float arr[] = new float[SIZE];

        //array fill with 1,                                                        
    for (int i = 0; i < arr.length; i++) {
        arr[i] = 1;
    }


       //calulate new values with new formula                                                              
     for (int i = 0; i < arr.length; i++) {
        arr[i] = (float) (i * Math.sin(0.2f + i / 5) * 
                              Math.cos(0.2f + i / 5) * 
        Math.cos(0.4f + i / 2));

    }
     //return new value
        return arr;
}
 private static float[] method2(){
    float arr[] = new float[SIZE];

    float firstarr[] = new float[h];

    float secondarr[] = new float[h];

    float result[] = new float[SIZE];

    for (int i = 0; i <arr.length ; i++) {
        arr[i] = 1;
    }
      //Devide array in two with same length arr/2,                                                                            
    System.arraycopy(arr, 0, firstarr, 0, h);
    System.arraycopy(arr, h, secondarr, 0, h);


    for (int i = 0; i < firstarr.length; i++) {
        firstarr[i] = (float) (i * Math.sin(0.2f + i / 5) *      
                                   Math.cos(0.2f + i / 5) *      
                                   Math.cos(0.4f + i / 2));
    }

    for (int i = 0; i < secondarr.length; i++) {
        secondarr[i] = (float) (i * Math.sin(0.2f + i / 5)                   
                                  * Math.cos(0.2f + i / 5)                   
                                  * Math.cos(0.4f + i / 2));
    }
    //compile back in one                                                                                

    System.arraycopy(firstarr, 0, result, 0, h);
    System.arraycopy(secondarr, 0, result, h, h);

    // return result
    return result;

}
    private static long amount(float[] arr){
    long result = 0;

    for (int i = 0; i <arr.length ; i++) {
       result += arr[i];
    }
    return result;
}




public static void main(String[] args) {
    System.out.println(amount(method1()));// ammount for first method: 22527562

    System.out.println(amount(method2())); // ammount for second method: -20047478

}}

共有1个答案

靳茂
2023-03-14

你的问题是循环。第一个方法循环i从0到N,第二个方法循环两次从i到N/2。

例如:对于N=4,第一个方法返回您

i=0 0.0 
i=1 0.17....
i=2 0.066....
i=3 0.099....

但是第二个:

i=0 0.0 
i=1 0.17....
i=0 0.0 
i=1 0.17....
    for (int i = h; i < SIZE; i++) {
    secondarr[i-h] = (float) (i * Math.sin(0.2f + i / 5)                   
                              * Math.cos(0.2f + i / 5)                   
                              * Math.cos(0.4f + i / 2));
}
 类似资料:
  • 我在Java中有两个几乎相同的方法。唯一的区别是它们有不同的参数类型。它们使用泛型并返回输入参数的类型T。我怎样才能摆脱重复的代码?下面是我的两个方法。最后,它们都使用不同的类型调用Spring。否则,方法是相同的。

  • 问题内容: 考虑到我有两个数组,例如: 这样,在一个方法中,我计算了两个数组,即& ,现在我想返回这两个数组。我应该怎么做? 我在这里读到我可以创建另一个类并定义某些对象类型,并将这些数组封装在该类构造函数中,但是我仍然感到困惑,并且不完全理解。 如果您能给我看一个可行的例子,或者有任何类似的想法,那将是很好的。 问题答案: 您实际上还可以返回如下内容: 假设在调用此方法的地方之外,返回的对象是。

  • 问题内容: 我已经看到了一些类似的问题两种不同的类型如何使用接口在golang中实现相同的方法?,但就我而言,我的类型没有相同的基本类型。我的类型是不同大小的数组。 因此,可能不重复两种方法GetByte0()? 问题答案: 例如, 输出:

  • 我有两个不同的方法,在两个不同的类中。我希望他们都能阅读同一行输入,并检查不同的内容。一个查找“给我冲杯咖啡”之类的说明,另一个查找不同的关键字,如“请”和“谢谢”(这些影响程序对我的反应): 然后我在我的主字符串中调用它们,只是为了测试它们: 我的控制台显示如下: 我知道发生了什么,但我想不出其他办法。我也尝试过使用同一个扫描仪,不同的字符串,但仍然不起作用。我怎样才能使这两种方法都能读取我的第

  • 本文向大家介绍C#比较二个数组并找出相同或不同元素的方法,包括了C#比较二个数组并找出相同或不同元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#比较二个数组并找出相同或不同元素的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家C#程序设计有所帮助。