我需要在这个公式[i]中为这个公式创建一个空检查,我不完全确定如何解决这个问题,因为我不太熟悉null检查和非常新的编程。非常感谢任何和所有帮助!
public static double calculateInventoryTotal(Book[] books)
{
double total = 0;
for (int i = 0; i < books.length; i++)
{
total += books[i].getPrice();
}
return total;
}
答案 0 :(得分:12)
首先,您应检查books
本身是否为空,然后只需检查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();
}
}
答案 1 :(得分: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;
}
答案 2 :(得分:3)
如果您使用的是Java 7,可以使用Objects.requireNotNull(object[, optionalMessage]);
- 检查参数是否为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;
}
答案 3 :(得分:2)
如果Books的数组为null,则返回零,因为它看起来方法计算所有提供的书籍的总价格 - 如果没有提供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;
}
你可以决定输入空输入值是否正确(不正确,但......)。
答案 4 :(得分:2)
您只需使用null
(或==
)运算符将对象与!=
进行比较即可。 E.g:
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;
}
答案 5 :(得分:1)
在for循环中,只需添加以下行:
if(books[i] != null) {
total += books[i].getPrice();
}
答案 6 :(得分:0)
这个问题相当陈旧。此时,提问者可能已经变成了一位经验丰富的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;
}
,而无需重写所有代码。
NullPointerException
另外,我想upvote @ 1ac0的答案。 在写作时我们也应该理解并考虑方法的目的。调用方法可以根据被调用方法的返回数据进一步实现逻辑。
此外,如果您使用JDK 8进行编码,它还引入了一种新方法来处理空检查并保护代码免受Optional
的影响。它定义了一个名为this
的新类。 Have a look at this for detail
最后,原谅我的英语不好。
答案 7 :(得分:0)
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();
}