8

私は本[i]のこの式でヌルチェックを作成する必要があります.私はヌルチェックに精通しておらず、プログラミングに非常に慣れていないため、これを行う方法が完全にはわかりません. どんな助けでも大歓迎です!

public static double calculateInventoryTotal(Book[] books)
{
    double total = 0;

    for (int i = 0; i < books.length; i++)
    {
        total += books[i].getPrice();
    }

    return total;
}
4

8 に答える 8

12

まず、booksそれ自体が null でないかどうかを確認してから、次のことを確認する必要がありbooks[i] != nullます。

if(books==null) throw new IllegalArgumentException();

for (int i = 0; i < books.length; i++){
   if(books[i] != null){
        total += books[i].getPrice();
   }
}
于 2014-02-09T20:21:46.950 に答える
4

メソッドにガード条件を追加して、booksが null でないことを確認し、配列を反復するときに null をチェックすることができます。

public static double calculateInventoryTotal(Book[] books)
{
    if(books == null){
        throw new IllegalArgumentException("Books cannot be null");
    }

    double total = 0;

    for (int i = 0; i < books.length; i++)
    {
        if(books[i] != null){
            total += books[i].getPrice();
        }
    }

    return total;
}
于 2014-02-09T20:22:18.307 に答える
3

Java 7 を使用しているObjects.requireNotNull(object[, optionalMessage]);場合は、 - を使用してパラメーターがnull. 各要素が null でないかどうかを確認するには、次を使用します

if(null != books[i]){/*do stuff*/}

例:

public static double calculateInventoryTotal(Book[] books){
    Objects.requireNotNull(books, "Books must not be null");

    double total = 0;

    for (int i = 0; i < books.length; i++){
        if(null != book[i]){
            total += books[i].getPrice();
        }
    }

    return total;
}
于 2014-02-09T20:21:00.723 に答える
2

Books の配列が null の場合は、メソッドが提供されたすべての Books の合計価格をカウントしているように見えるため、0 を返します。Book が提供されていない場合は、0 が正しい値です。

public static double calculateInventoryTotal(Book[] books)
{
if(books == null) return 0;
    double total = 0;
    for (int i = 0; i < books.length; i++)
    {
        total += books[i].getPrice();
    }
    return total;
}

null 入力値を入力できることが正しいかどうかを判断するのはあなた次第です (正しくないはずですが...)。

于 2014-02-09T20:21:34.877 に答える
2

(or ) 演算子をnull使用してオブジェクトを比較するだけです。例えば:==!=

public static double calculateInventoryTotal(Book[] books) {
    // First null check - the entire array
    if (books == null) {
        return 0;
    }

    double total = 0;

    for (int i = 0; i < books.length; i++) {
        // second null check - each individual element
        if (books[i] != null) {
            total += books[i].getPrice();
        }
    }

    return total;
}
于 2014-02-09T20:22:21.083 に答える
1

for ループ内に、次の行を追加するだけです。

if(books[i] != null) {
     total += books[i].getPrice();
}
于 2014-02-09T20:21:57.230 に答える
1

この質問はかなり古いです。この時点で、質問者は経験豊富な Java 開発者になっている可能性があります。それでも、初心者に役立ついくつかの意見をここに追加したいと思います。

JDK 7 ユーザーの場合、ここで使用

Objects.requireNotNull(object[, optionalMessage]);

安全ではありません。この関数は、オブジェクトNullPointerExceptionが見つかり、それが.nullRunTimeException

それはプログラム全体を終了します!!。したがって、またはnullを使用して確認することをお勧めします。==!=

また、Listの代わりに使用しArrayます。アクセス速度は同じですが、CollectionsoverArrayを使用すると、後で基になる実装を変更することにした場合でも柔軟に変更できるなど、いくつかの利点があります。たとえば、同期アクセスが必要な場合は、Vectorすべてのコードを書き直さずに実装を に変更できます。

public static double calculateInventoryTotal(List<Book> books) {
    if (books == null || books.isEmpty()) {
        return 0;
    }

    double total = 0;

    for (Book book : books) {
        if (book != null) {
            total += book.getPrice();
        }
    }
    return total;
}

また、@ 1ac0の回答に賛成票を投じたいと思います。メソッドの目的についても理解し、検討する必要があります。呼び出し元のメソッドには、呼び出されたメソッドの返されたデータに基づいて実装する追加のロジックが含まれる場合があります。

また、JDK 8 でコーディングしている場合は、null チェックを処理してコードを保護する新しい方法が導入されていますNullPointerException。という新しいクラスを定義しましたOptional詳しくはこちらをご覧ください

最後に、私の悪い英語を許してください。

于 2018-04-20T21:52:16.587 に答える