Java节奏游戏中LinkedList空判定语句无输出问题如何解决?
问题原因
你的空判定逻辑执行顺序错误,所有空判断都放在了getFirst()调用之后。当LinkedList为空时,方法第一行的beatLinkedList.getFirst()会直接抛出NoSuchElementException,程序中断执行,永远走不到后续的空判定代码。
你补充的现象也符合这个逻辑:当你把判定条件改为beatLinkedList.size() == 1时,链表还有1个元素,getFirst()不会抛出异常,所以可以走到后续的判定逻辑触发打印;而链表size为0时第一行直接报错,自然不会触发空判定的逻辑。
修复方案
- 进入方法后优先判断链表是否为空,为空时直接处理胜利逻辑并终止方法执行,再进行后续的节拍处理,修改后的参考代码如下:
public void checkBeats(){ // 优先做空判断,空的时候直接处理胜利逻辑 if (beatLinkedList.isEmpty()){ System.out.println("YOU WIN"); return; } // 空判断通过后再获取节拍对象,避免抛出异常 Beat currentObject = (Beat) beatLinkedList.getFirst(); int currentBeatPosition = currentObject.getX(); if (currentBeatPosition <= 70) { Player.lives -= 1; beatLinkedList.removeFirst(); for (GameObject obj : Handler.object) { if (obj instanceof Beat) { Handler.object.remove(obj); break; } } checkLives(); } }
内容的提问来源于stack exchange,提问作者SourOddity
相关产品推荐
相关产品推荐

