Я получаю IndexOutOfBoundsException
на линии, которая вызывает мою пользовательскую функцию: motCars = remplaceTirets(motAlea, motCars, lettreDon);
. Эта функция должна превратить один или несколько штрихов в письмо, если данное письмо равна буква в слове) и линия в реальной функции, где она говорит: tempo += tirets.charAt(j);
Индекс Java Out of Bounds Exception
Результат: _ _ _ _ _ _ _ (сумма этих черточек зависит от слова выбранного программы, которая работает, а затем он просит дать письмо, но когда я даю письмо я получаю:
исключения в потоке «основной 'java.lang.String IndexOutOfBoundsException. Индекс строки за пределами диапазона: 1.
Это отчасти на французском, потому что я живу в Квебеке. Но я надеюсь, что это не имеет значения, потому что французские слова касаются только строк и слов, а не логики Java. Я новичок и переполнен всеми советами на всех форумах на Java. Любые конкретные рекомендации будут приветствоваться.
Заранее благодарим за то, что нашли время, чтобы посмотреть!
Анита
import java.util.Scanner;
class Tp {
public static void main(String[] args) throws Exception {
Scanner clavier = new Scanner(System.in);
String motAlea = "";
String motCars = "";
char lettreDon = Character.UNASSIGNED;
String tempo = "";
String invite = "";
String tirets = "";
int l = 0;
int m = 0;
final String ANNONCE = "J'ai choisi un mot a deviner\n";
final String INSTRUCT = "Entrez une lettre a la fois. L'indice d'essais: 15.\n";
final String INVITE = "\tEntrez une lettre: ";
final String BRAVO = "BRAVO ! Le mot a deviner etait: ";
final String DESOLE = "DESOLE...Vous avez perdu...";
String[] vingtMots = { "WATTHEUREMETRE", "HELIOGRAPH", "GRENOUILLERE", "CONTRAROTATIF",
"CUISSARDE", "BRIGANTINE", "AVITAILLEUR", "ENTREDOUBLURE",
"GALLETAGE", "OEUILLERE", "CREMAILLERE", "HALTEROPHILIE",
"MARTINGALE", "EMPENNAGE", "ENCOCHAGE", "DECLENCHEUR",
"BIMETALLIQUE", "PIVOTEMENT", "DECLINAISON", "CROISILLON"
}; // tableau string
int indexAlea = 0;
indexAlea = (int)(Math.random() * 20) + 1;
motAlea = vingtMots[indexAlea];
for (l = 0; l < motAlea.length(); l++) {
tempo += "_";
motCars = tempo;
} // for
System.out.print(ANNONCE);
System.out.print(INSTRUCT);
l = 0;
do {
if (motCars.equals(motAlea)) {
System.out.print(BRAVO + motAlea + ", " + "devine en " + m +
" tentatives");
System.exit(0);
} // if
if (l == 15) {
System.out.print("\n" + DESOLE + "Le mot a devine etait: " +
motAlea + ". " + "Au revoir... ");
System.exit(0);
} // if
for (int i = 0; i < motAlea.length(); i++) {
System.out.print(motCars.charAt(i) + " ");
} // for
m = l + 1;
invite = "\t" + INVITE + m + "> :";
lettreDon = lecture(invite);
motCars = remplaceTirets(motAlea, motCars, lettreDon);
l++;
} // do
while (l < 16); {
System.out.print("\n" + DESOLE + "Le mot a devine etait: " + motAlea + ". "
+ "Au revoir... ");
} // while
} //main(...)
public static char lecture(String invite1){
Scanner clavier = new Scanner(System.in);
final String ERREUR = "La valeur entree est erronnee !\nReprenez-vous...";
final String VIDE = " ";
String retour = "";
do {
try {
System.out.print(invite1);
retour = clavier.nextLine().trim(); // Mise en forme;
for (int k = 0; k < retour.length(); k++) {
if(Character.isLetter(retour.charAt(k))) {
return retour.toUpperCase().charAt(0);
} // if
} // for
} // try
catch (Exception e) {
System.out.print(ERREUR);
}
}// do
while (!retour.equals(VIDE)); {
retour = "X";
return retour.charAt(0);
} // while
} // lecture(...)
public static String remplaceTirets(String motAlea1, String tirets,
char lettre) {
String retour;
String tempo = "";
for (int j = 0; j < motAlea1.length(); j++) {
String lettre1 = Character.toString(lettre);
if (motAlea1.charAt(j) != lettre1.charAt(0)) {
tempo += tirets.charAt(j);
} // if
else {
tempo += lettre1.charAt(0);
} // else
tirets = tempo;
} // for
return retour = tirets;
} //remplaceTirets(...)
}//Tp
Просьба указать ** точную ошибку/исключение ** с полной обратной связью. –
@Anita. Если вы уменьшите количество отправленных кодов, вам будет лучше (и быстрее). Если вы можете удалить код, который, как вы знаете, не является частью проблемы, вы должны, так как это поможет другим быстрее найти вашу проблему. – amccormack
Если вы получаете IndexOutOfBoundsException на charAt, это потому, что значение индекса символа выходит за рамки для индексируемой строки. Это произойдет, если у шипов будет меньше motAlea1. –