Dans mon programme, j'utilise beaucoup la fonction Math.random(), parfois couplée à Math.round().
Lors de l'exécution de mon programme, il survient parfois (genre 1 fois sur 3) une erreur :
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.util.Random.nextDouble(Unknown Source)
at java.lang.Math.random(Unknown Source)
at evolution.Amibe.combat(Amibe.java:105)
at evolution.Amibe.combat(Amibe.java:154)
En cherchant dans d'autres posts, j'ai cru comprendre que cette erreur survenait lors de boucles ou d'appels infinis. Ce n'est pas mon cas.
Voici le code de la méthode où survient les erreurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
public void combat(Amibe a){
		[...]
 
		int c=(int)Math.round(Math.random()); **ligne 105 **
 
		switch(c){
		case 0 :
			[...]
		case 1 :
			[...]
		default :
			[...]
		}
 
		//*****************************
 
		//defense
 
		[...]
 
		//gestion de la defense
 
		[...]
 
		Amibe attaquant,defenseur,permutation;
		//si le combat n'est pas fini les roles s'echange
		while((energie>=10)||(a.getEnergie()>=10)){
			permutation=this;
			attaquant=permutation;
			defenseur=a;
 
			*** defenseur.combat(attaquant); *** ** ligne 154 **
		}		
	}
Il semble donc faire un appel infini sur la ligne ***, or pourtant, elle n'est pas systématique, en relançant mon programme plusieurs fois pour retomber sur l'erreur, il m'a fallu 5 tentatives...
Que se passe-t-il?