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
}
}
}
Je voudrais attirer votre attention à l'intérieur de la classe Scoreboard, à sa méthode add . Ma question est pourquoi ce code ne manque pas.Java Array! Hors des limites
La première fois que la méthode add s'exécute, numEntries est égal à 0. Ainsi, dans l'instruction if, le tableau [numEntries - 1] .getScore doit obtenir un IndexOutOfBounds.
Lorsque je le mets avant le si je reçois la bonne exception. Est-ce que le si attrape l'exception?
J'ai imprimé la valeur de (numEntries - 1) et j'obtiens -1. Mais encore à l'intérieur du si ne semble pas le déranger.
La ligne à laquelle je me réfère est à l'intérieur de la méthode add le premier if.
if (numEntries < board.length || newScore > board[numEntries - 1].getScore())
Lors de la première initialisation du tableau de bord, la table [numEntries - 1] n'existe toujours pas. Ce qui signifie, assurez-vous que votre tableau a des éléments avant d'essayer d'y accéder. –
numEntries
@ChakradharVyza C'est un opérateur OU, pas un ET. Donc, si la première condition est fausse, la seconde est vérifiée et PAS ignorée. –