StackOverflowError probleme de debutant
bonsoir , j’essaie d’exécuter mon programme mais j'ai une erreur du type Stackoverflow
voila le programme, le problème c'est au niveau du deuxième sous programme en bas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| static int enleverPresent(Block<Integer> t1 , Block<Integer> t2 ){
int a = 0 ;
for(int i = 0 ; i<t2.size() ; i++){
int x = (Integer) t2.get(i);
for(int k = 0 ; k<t1.size() ; k++)
{
if((Integer)t1.get(k) == x){
int b = t1.get(k);
t1.set(k , t1.get(t1.size()));
t1.set(t1.size(), b);
a++;
}
}
}
return a;
} |
Y'a pas de souci avec le programme du moins je penses mais seulement quand j'essaie de l’exécuter l'erreur est signalée ici :
Code:
1 2 3 4 5 6 7 8 9
| public T get(int i) {
if(i >=0 && i< this.size())
return this.get(i); // la il m'indique un staroverflow
else
return null;
} |
voila mon code et la classe test
code principal
Code:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| public class Block<T> implements Itableau<T>
{
private int capacite ; // capacite du tableau
private int taille ; // nombre de case itulise
private Array<T> tab ; //tableau dynamique
// constructeur pour creer un nouveau tableau avec ses propriete
public Block(int capacite)
{
this.capacite = capacite;
tab = new Array<T>(capacite);
taille = 0;
}
//verifie si le tableau est plein
public boolean full() {
return capacite == taille;
}
//renvoie la taille du tableau
public int size() {
return taille;
}
//verifie si le tableau est vide ou pas
public boolean empty() {
return taille == 0;
}
//renvoie l'element a la position i
public T get(int i) {
if(i >=0 && i< size())
return get(i);
else
return null;
}
//modifier l'element a la position i
public void set(int i, T v) {
if(i >=0 && i< this.size()){
tab.set(i, v);
}
}
//ajouter element a la fin
public void push_back(T v) {
if(this.full() == false){
tab.set(taille, v);
taille++;
}
}
//suppression dernier element element
public void pop_back(){
if(!this.empty()){
tab.set(taille, null);
taille--;
}
}
} |
voila la classe test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class Test {
public static void main(String[] args) {
Block<Integer> t1 = new Block<Integer>(3);
Block<Integer> t2 = new Block<Integer>(2);
t1.push_back(1);
t1.push_back(5);
t1.push_back(6);
t2.push_back(8);
t2.push_back(2);
t2.push_back(4);
enleverPresent(t1, t2);
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| static int enleverPresent(Block<Integer> t1 , Block<Integer> t2 ){
int a = 0 ;
for(int i = 0 ; i<t2.size() ; i++){
int x = (Integer) t2.get(i);
for(int k = 0 ; k<t1.size() ; k++)
{
if((Integer)t1.get(k) == x){
int b = t1.get(k);
t1.set(k , t1.get(t1.size()));
t1.set(t1.size(), b);
a++;
}
}
}
return a;
}
} |
j'ai deux tableau , t1 et t2 qui sont du type Block<T> ,je dois enlever de t1 tout les element present dans t2 sans decaler les elemets de t1,
mon idee etait de deplacer l'element a la derniere l'element courant present sur t2 pour pouvoir le supprimer avec la methode pop-back() , sauf que la derniere case etant occupe je dois faire un echange entre l'element courant et l'element a la derniere position (partie rouge de la methode enlever premier)
je peux le faire avec une Arraylist ou une Linkedlist (beaucoup plus simple ) mais c'est pas le but du TP.
je dois imperativement itulise un type Array implemente a l'ecole.
merci si vous avez besoin de precision je suis la.