本[i]のこの式でnullチェックを作成する必要がありますが、nullチェックにあまり精通しておらず、プログラミングが非常に新しいため、これをどのように実行するか完全にはわかりません。すべての助けが大歓迎です!
public static double calculateInventoryTotal(Book[] books)
{
double total = 0;
for (int i = 0; i < books.length; i++)
{
total += books[i].getPrice();
}
return total;
}
最初に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();
}
}
メソッドにガード条件を追加して、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;
}
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;
}
==
(または!=
)演算子を使用して、オブジェクトを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;
}
Booksの配列がnullの場合、メソッドは提供されるすべてのBooksの合計価格をカウントするように見えるため、ゼロを返します。Bookが提供されない場合、ゼロは正しい値です。
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入力値を入力できるかどうかを判断するのはあなた次第です(正しくないかもしれませんが...)。
Forループ内に、次の行を追加するだけです。
if(books[i] != null) {
total += books[i].getPrice();
}
この質問はかなり古いです。質問者は、この時点で経験豊富なJava開発者になっている可能性があります。ただし、初心者に役立つ意見をここに追加します。
JDK 7ユーザーの場合、ここで使用
Objects.requireNotNull(object[, optionalMessage]);
安全ではありません。この関数は、NullPointerException
オブジェクトを検出し、null
である場合、RunTimeException
をスローします。
これでプログラム全体が終了します!!。したがって、==
または!=
を使用してnull
を確認してください。
また、List
の代わりにArray
を使用します。アクセス速度は同じですが、Collections
をArray
よりも使用することには、基礎となる実装を後で変更することを決定した場合など、いくつかの利点があります。たとえば、同期アクセスが必要な場合、すべてのコードを書き換えずに実装を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
という新しいクラスを定義しました。 詳細はこちらをご覧ください
最後に、私の悪い英語をご容赦ください。
public static double calculateInventoryTotal(Book[] arrayBooks) {
final AtomicReference<BigDecimal> total = new AtomicReference<>(BigDecimal.ZERO);
Optional.ofNullable(arrayBooks).map(Arrays::asList).ifPresent(books -> books.forEach(book -> total.accumulateAndGet(book.getPrice(), BigDecimal::add)));
return total.get().doubleValue();
}