我有一个小问题..如何返回Array List类型的null。这是完整的问题:RectangleList类管理一个Rectangle列表。它有一个构造函数,它将矩形的数组列表作为参数。它有一个方法返回具有最小区域的Rectangle(如果列表为空,则返回null)。 谢谢!
以下是我所做的代码:
public Rectangle smallestArea()
{
double min = list.get(0).getWidth() * list.get(0).getHeight();
int k=0;
if(list.size() > 0)
{
for(int i=0; i<list.size(); i++)
{
if(list.get(i).getWidth() * list.get(i).getHeight() < min)
{
min = list.get(i).getWidth() * list.get(i).getHeight();
k=i;}
}
return list.get(k);
}
else
{
return null;
}
}
And I get this error : java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at RectangleList.smallestArea(RectangleList.java:39)
at RectangleListTester.main(RectangleListTester.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.horstmann.codecheck.Main$2.run(Main.java:249)
Error:
Program exited before all expected values were printed.
我还想指出,这不是学校的功课..这是我简单的工作,我被困在这里。感谢您的支持。
答案 0 :(得分:1)
null
不属于任何类型,可以用于所有类型(不包括基元)。
所以,你总是可以说MyClass obj = null;
如果您有2个具有不同参数类型的重载方法,则可能存在其他问题,例如:
void foo(String s);
void foo(Integer i);
在这种情况下,尝试调用:foo(null)
将产生编译错误,因为编译器无法理解您所指的两种方法中的哪一种。在这种情况下,您可以执行转换:
foo((String)null)
会调用foo()
foo((Integer)null)
会调用foo()
答案 1 :(得分:0)
您可以在需要时返回null。您返回的是对对象的引用,null是对不存在的对象的通用引用,因此您不必对其进行强制转换。
public Rectangle getSmallestAreaRectangle() {
if (theList.isEmpty()) {
return null;
}
// ... do computations
return theRectangle;
}