C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: Bigdecimal型でヌルにはaddできない?


(過去ログ 114 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■67366 / inTopicNo.1)  Bigdecimal型でヌルにはaddできない?
  
□投稿者/ NattoRC (12回)-(2013/07/27(Sat) 16:18:16)

分類:[Java] 

よろしくお願いします。

下記のコードで、ヌルポで落ちるのですが、ヌルにはaddできないのでしょうか。
コメントを外すと動きます。

import java.math.BigDecimal;

class test

{
public static void main(String[] args) {
BigDecimal [] bi = new BigDecimal[5];
     // bi[0] = BigDecimal.ZERO;
BigDecimal bigOne = BigDecimal.ONE;
BigDecimal a = bi[0].add(bigOne);
System.out.println(a);
}
}
引用返信 編集キー/
■67369 / inTopicNo.2)  Re[1]: Bigdecimal型でヌルにはaddできない?
□投稿者/ επιστημη (67回)-(2013/07/27(Sat) 19:30:21)
επιστημη さんの Web サイト
> 下記のコードで、ヌルポで落ちるのですが、ヌルにはaddできないのでしょうか。

できんでしょうね。
BigDecimal [] bi = new BigDecimal[5];
は5つの"空き箱"を用意しただけ。
箱のナカミは空ですから。

引用返信 編集キー/
■67376 / inTopicNo.3)  Re[2]: Bigdecimal型でヌルにはaddできない?
□投稿者/ NattoRC (16回)-(2013/07/28(Sun) 08:29:40)
No67369 (επιστημη さん) に返信
>>下記のコードで、ヌルポで落ちるのですが、ヌルにはaddできないのでしょうか。
>
> できんでしょうね。
> BigDecimal [] bi = new BigDecimal[5];
> は5つの"空き箱"を用意しただけ。


> 箱のナカミは空ですから。
>
こんな感じでは?違うんでしょうか。

ハコ
|     |
|     | + add + ONE
|     |
|     |
−―――――−


ハコ
|     |
|     | 
| ONE   |
|     |
−―――――−

引用返信 編集キー/
■67377 / inTopicNo.4)  Re[3]: Bigdecimal型でヌルにはaddできない?
□投稿者/ επιστημη (70回)-(2013/07/28(Sun) 10:26:36)
επιστημη さんの Web サイト
BigDecimal [] bi = new BigDecimal[5];
BigDecimal bigOne = BigDecimal.ONE;
BigDecimal a = bi[0].add(bigOne);

において、bi[0] は null ですから、3行目は

BigDecimal a = null.add(bigOne);

てことです。nullはいかなるメソッドも持っていません。空なんだから。
ならば当然 add メソッドも持っていません。

nullは0ではありません。"空虚"なんです。


引用返信 編集キー/
■67378 / inTopicNo.5)  Re[3]: Bigdecimal型でヌル
□投稿者/ Azulean (184回)-(2013/07/28(Sun) 10:32:06)
2013/07/28(Sun) 10:32:45 編集(投稿者)

BigDecimal a = bi[0].add(bigOne); とする場合、bi[0] と bigOne という両方の箱から数値を取り出して、足し合い、新しい結果を a という箱に入れます。
片方、もしくは両方の箱が空の場合、結果を定義できないのでエラーになります。

No67376 (NattoRC さん) に返信
> こんな感じでは?違うんでしょうか。

基本的に、箱に値を入れること(空のハコに ONE を入れること)を「代入」と呼びます。
記載されているイメージ図としては「add」ではなく、「=」であれば成り立ちます。

もし、足し算のイメージなのであれば、暗黙的に「ハコが 0 と解釈される」と考えてしまっているのでしょう。
足し算には二つの値が必要ですが、そのコードでは一つの値しかないので、足し算を定義できません。
このため、相手として 0 を用意してあげるか、単なる代入( = ONE; )とする必要があります。



// かぶった。orz
引用返信 編集キー/
■67379 / inTopicNo.6)  Re[4]: Bigdecimal型でヌルにはaddできない?
□投稿者/ επιστημη (71回)-(2013/07/28(Sun) 10:42:54)
επιστημη さんの Web サイト
nullを0とみなしたいなら、そうなるようにコードを書かにゃならんです。

import java.math.BigDecimal;

class test {

  static BigDecimal add(BigDecimal x, BigDecimal y) {
    if ( x == null ) x = BigDecimal.ZERO;
    if ( y == null ) y = BigDecimal.ZERO;
    return x.add(y);
  }

  public static void main(String[] args) {
    BigDecimal bigOne = BigDecimal.ONE; 
    BigDecimal[] b = new BigDecimal[5];
    BigDecimal a = add(b[0], bigOne);
    System.out.println(a);
  }
}

引用返信 編集キー/
■67380 / inTopicNo.7)  Re[5]: Bigdecimal型でヌルにはaddできない?
□投稿者/ NattoRC (17回)-(2013/07/28(Sun) 18:28:57)
お二方ともありがとうございます。

>BigDecimal a = null.add(bigOne);

非常にわかりやすかったです。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -