public class GameEntry {
private String name;
private int score;
public GameEntry(String n, int s){
name = n;
score = s;
}
public String getName(){
return name;
}
public int getScore(){
return score;
}
public String toString(){
return "(" + name + ", "+ score + ")";
}
}
public class Scoreboard {
private int numEntries = 0;
public GameEntry[] board;
public Scoreboard(int capacity){
board = new GameEntry[capacity];
}
**public void add(GameEntry e){**
//System.out.println(board[numEntries - 1].getScore());
int newScore = e.getScore();
//Is the new entry really a high score
//*****This is the line i refer to as******
if (numEntries < board.length || newScore > board[numEntries - 1].getScore()) {
if (numEntries<board.length) {
numEntries++;
}
//shift any lower scores rightward to make room for the new entry
int j = numEntries - 1;
while(j>0 && board[j-1].getScore()<newScore){
board[j] = board[j-1]; //shift entry from j-1 to j
j--; // and decrement j
}
board[j] = e; // when done add a new entry
}
}
}
我想提醒您注意记分板课程中的添加方法。
我的问题是为什么此代码不会失败。
第一次运行add方法时,numEntries等于0.所以在if语句中,board [numEntries - 1] .getScore应该得到一个IndexOutOfBounds。
当我把它放在if之前我得到了正确的例外。 if是否会捕获异常?
我打印了(numEntries - 1)的值,我得到了-1。但是在if ot里面似乎并没有打扰它。
我引用的行在add方法中是第一个if。
if (numEntries < board.length || newScore > board[numEntries - 1].getScore())
答案 0 :(得分:4)
简单答案:逻辑或的短路评估。
当条件的第一部分,即numEntries < board.length
评估为true
时,||
之后的第二部分根本不会被评估。
答案 1 :(得分:1)
您首先检查以下表达式:
numEntries < board.length
然后你有一个OR(||)后跟你要问的表达式。
编译器从左到右检查表达式。因此,如果上面的表达式为真,它只输入if并开始执行它的内容而不检查其他表达式。