【问题标题】:Why is my method giving me the null value?为什么我的方法给了我空值?
【发布时间】:2013-12-02 14:08:01
【问题描述】:

我不明白为什么我会收到这样的价值。这种方法直接依赖一个数组,间接依赖另外两个。它们都填充了相似数量的步骤,但是填充它们的方法各不相同。一些从顶部到零,而另一些从零开始。如果这没有意义,我可以详细说明

alpha 值是自上而下填充的,而它依赖于另一个数组 tat 是自下而上填充的。允许吗?

blic class ItrDensityGrid {

public double itrrho [ ];           // defines an a array of adjusted densities

double b = InitialConditions.bmod;  

// Iterating grid of adjusted densities 

public ItrDensityGrid ( int shells , double radius , double mass , double bmod ) {      // Density constructor with inputs

    GravityGrid gg = new GravityGrid ( shells , radius , mass , bmod );             // Pulls gravity array for use, will change each iteration  

    itrrho = new double [ shells + 1 ];                                         // Defines number of elements in array as shells with steps of 1

    for( int k = shells ; k >= 1 ; k -- ){                                  // for loop fills array from top shell down

    itrrho[ k ] = ( itrrho [ k ] * ( 1 + ( gg . alpha [ k ] * ( 1.0 / 2 )))*( 1 / ( 1 - (( gg.alpha[ k ]) * ( 1.0 / 2 )))));   // defines elements form top down

        System.out.println("The adjusted density at shell " + k + " is " + itrrho[k]);

        }
    }

public double itrrho( int k ){

    return( itrrho[ k ] );

    }
}

【问题讨论】:

  • 如果这没有意义,我可以详细说明 - 请这样做。我什么都听不懂。
  • 是样本难以理解还是我的解释?
  • 哪个方法给出null?它到底在哪里给出null?您是否因此而遇到任何异常?
  • 首先,这段代码无法编译,因为变量public double itrrho [ ]和方法public double itrrho具有相同的名称,这是不允许的..所以,重命名它们中的任何一个......
  • 这会打印出什么 System.out.println("外壳调整后的密度 " + k + " 是 " + itrrho[k]);

标签: java arrays loops for-loop methods


【解决方案1】:
itrrho[ k ] = ( itrrho [ k ] *  ( 1 + ( gg . alpha [ k ] * ( 1.0 / 2 )))*( 1 / ( 1 - (( gg.alpha[ k ]) * ( 1.0 / 2 ))))););

这里itrrho[k]没有初始化,因此 itrrho 的每个元素都是0.0

所以itrrho [ k ] * ( 1 + ( gg . alpha [ k ] * ( 1.0 / 2 )))*( 1 / ( 1 - (( gg.alpha[ k ]) * ( 1.0 / 2 )))))

将是0.0 * ( 1 + ( gg . alpha [ k ] * ( 1.0 / 2 )))*( 1 / ( 1 - (( gg.alpha[ k ]) * ( 1.0 / 2 )))))

因此你得到0.0

new double[shels+1];之后做这样的事情

for(int i=0;i<itrrho.length;i++){
    itrrho[i]=1.0; //initialization
}

然后看看结果

【讨论】:

  • 嗯,未初始化到底是什么意思?我在这段代码中的其他 for 循环以类似的方式运行。
  • 当你创建一个双数组时,你必须在里面放一些东西,否则每个元素默认都是 0.0。并且您将结果与已经有 0.0 的 itrrho[k] 相乘,所以您的结果是 0.0
  • 我明白了。我很确定我用这条线实现了这一点,itrrho = new double [ shells + 1 ];
  • @Alejandro 检查答案,看看如何初始化数组
  • 返回的值是:
【解决方案2】:

你需要实例化这个类,否则数组不会被填充。

public class TestItrDensityGrid{
    public static void main(String[] args){
        ItrDensityGrid grid = new ItrDensityGrid ( 5 , 10.0 , 10.0 , 5.0 );

        System.out.println(grid.itrrho( 5 ));
    }
}

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多