2014-12-03 82 views
0
ArrayList beds = new ArrayList(49); 
public Patient getPatient(int bedNumber) { 
    if (beds.get(bedNumber) != null) { 
     return (Patient) beds.get(bedNumber); 
    } 
    else { 
     return null; 
    } 

} 

我有一个问题,我似乎无法让Java在方法中输出null。假设我将病人分配到病床ArrayList中的一个项目上,然后尝试使用上面创建的getPatient方法在第11张病床上获得病人,但是由于尚未添加11个病人,因此您不能这样做。当我尝试这样做而不是java.lang.IndexOutOfBoundsException时,如何使其输出为null。编译器输出IndexOutOfBoundsException

+0

只需检查:你认为'new ArrayList(49)'做了什么? – immibis 2014-12-03 02:57:51

+0

另外,你为什么不使用'ArrayList '? – immibis 2014-12-03 02:58:20

+1

编译器不输出IndexOutOfBoundsException(除非它被严重破坏)。 – 2014-12-03 02:58:45

回答

1

首先,编译器与此无关,因为它是显示IndexOutOfBoundsException的JVM。

你应该做的是检查你的bedNumber对ArrayList的大小,而不是ArrayList项不存在(超出界限)为空。所以做简单的诠释数学。

if (bedNumber > 0 && bedNumber < beds.size()) { 
    // do your stuff here 
} else { 
    // myself, I'd throw an exception here, not return null 
} 
+0

是的,我知道我应该这样做,但这不是我应该做的,我应该做的是在没有第11名患者时输出空值。 – user2177940 2014-12-03 02:57:17

+0

@ user2177940:然后返回null。 – 2014-12-03 02:57:45

1

你可以只修改if语句来检查ArrayList的大小。

ArrayList beds = new ArrayList(49); 
public Patient getPatient(int bedNumber) { 
    if (bedNumber < beds.size()) { 
     return (Patient) beds.get(bedNumber); 
    } 
    else { 
     return null; 
    } 

} 
+0

那么什么时候12和13的元素,而不是11呢? – user2177940 2014-12-03 03:03:54

+0

如果有一个空的空间,它将具有'null'的值。 'IndexOutOfBoundsException'来自当你访问'ArrayList'之外,而不是当你访问一个空的空间时。 – Greg 2014-12-03 03:05:37

+0

但是我已经将ArrayList容量定义为50,所以有50个最初的空白空间? – user2177940 2014-12-03 03:12:01

0

而在其他的答案的建议是相当不错的,这是被忽视的一件事是你的[RAW] ArrayList构造。

new ArrayList(49)只有您的ArrayListset the initial capacity必须调整大小。这并不影响数组列表完全是如何工作的;如果您尚未添加任何元素,则其大小仍会报告0

检查您的界限;如果他们输入的值大于您支持的值,则拒绝它。

// The zeroth location in a list is the first element in it. 
if(0 <= bedNumber && bedNumber < beds.size()) { 
    // Cast necessary since it's a raw ArrayList 
    // Totally avoidable if you use ArrayList<Patient> 
    return (Patient) beds.get(bedNumber); 
} else { 
    return null; 
} 
+0

那我该如何设置一个尺码呢? – user2177940 2014-12-03 03:21:44

+0

添加东西。在任何种类的List中唯一的大小是列表支持多少事情。 – Makoto 2014-12-03 03:22:11

0

这里的要点是,你的床单实际上有零的大小。所以beds.get(我)不管我会抛出这个异常,因为它应该。我想你错了我们在Java中定义数组的方式,定义了一个ArrayList