2017-12-17 9 views
-1

私はちょっとした奇妙なタイプミスがあると思っていますが、私は困惑しています。2番目の長い引数は無視されますか?

public void getAvailableStorage() { 
     File path = Environment.getDataDirectory(); 
     StatFs stat = new StatFs(path.getPath()); 
     long blockSize = stat.getBlockSizeLong(); 
     long availableStorage = blockSize * stat.getAvailableBlocksLong(); 
     long totalStorage = blockSize * stat.getBlockCountLong(); 
     mBackupView.showAvailableStorage(availableStorage, totalStorage); 
    } 

が最後の行にブレークポイントがtotalStorgeとavailableStorageがうまく計算されることを示しています。私は、次のコードを持っています。 showAvailableStorage();に移動します。

public void showAvailableStorage(long free, long total) { 
     float freePercentage = (float)(free/total) * 100; 
    } 

何らかの理由で、最初の引数だけが値を取得します。しかし、これはgetAvailableStorage()の値をどのような順序で渡すかに関係なくです。 2番目の引数(合計)は無視されます。メソッドで破棄されるのは、最初の引数の値だけです。私はここで何が欠けていますか?メソッドに任意の値を渡しても、同じ結果が得られます。

EDITは:しかし、これはいくつかの理由のために働く...

public void showAvailableStorage(long free, long total) { 
     long newTotal = total; 
     float freePercentage = (float)(free/total) * 100; 
    } 
+0

多くのタイムブレークポイントは期待どおりに動作しません。彼らは奇妙な価値を示す。 'showAvailableStorage()'メソッドを呼び出す前に両方の値をログに記録し、 'freePercentage'を計算した後に再び3つの値をすべて記録することができます。 –

+0

また、2番目の値の合計が得られない場合は、totalのデフォルト値が0になることを意味します。そこで、DivideByZeroExceptionが得られるはずです。あなたはそれを取得していますか? –

+0

@SaranSankaranあなたが正しいです。これは一見デバッガのバグです。値は実際には正しいことが判明し、デバッガには表示されませんでした。ありがとう。 – ardevd

答えて

0

何度も、デバッガが期待通りに動作せず、奇妙な値を示します。しかし、あなたのコードは正しいです。

値をロギングして正確な値を調べることができます。

0

は、問題は一見デバッガのバグによって引き起こされる判明します。正しい値が実際に渡されましたが、ステップ実行時にデバッガに表示されませんでした。

関連する問題