Bon déjà bonjour à tous,
les condescendants aigris dehors, je débute.
J'essai de faire un quizz sur les pays d'Europe pour m'entrainer à la programmation et depuis hier j'ai une erreur
Exception in thread "main" java.lang.StackOverflowError
at Pays.<init>(Pays.java:5)
avec la ligne at Pays.<init>(Pays:java:5) qui se lance à l'infini.
qui se lance et qui est apparu quand j'ai décidé de bouger mon quizz dans une classe. J'ai cru comprendre qu'il s'agissait d'un problème de récurcivité mais même après avoir cherché je comprends pas...
Mon main :
public class Test {
public static void main(String[] args) {
Pays pays =new Pays();
}
}
Ma classe Pays :
import java.util.ArrayList;
import java.util.Scanner;public class Pays {
public Pays pays = new Pays();public String paysEu1 = new String();
public String paysIn = new String();public void paysEu(String pays) {
ArrayList Europe = new ArrayList();Europe.add("Albanie"); Europe.add("Andorre"); Europe.add("Arménie"); Europe.add("Autriche");
Europe.add("Azerbaidjan"); Europe.add("Biélorussie"); Europe.add("Belgique"); Europe.add("Bosnie-Herzégovine");
Europe.add("Bulgarie"); Europe.add("Croatie"); Europe.add( "Chypre"); Europe.add( "Tchéquie"); Europe.add(12, "Danemark");
Europe.add("Estonie"); Europe.add("Finlande"); Europe.add("France");
quizz();}
public String getPaysEu() { //getter
return paysEu1;
}public void setPaysIn(String PaysIn) { //setter
paysIn = paysEu1;
}public void quizz() { // objet quizz
int Compteur = 0;
Scanner sc = new Scanner(System.in);do {
System.out.println("Compteur = " + Compteur + "/100");
System.out.println("Veuillez taper un nom de pays : ");
pays.setPaysIn(sc.nextLine());if(paysEu1.contains(paysIn) == true) {
Compteur++;
System.out.println("+1 point pour " + pays);
}
if(paysEu1.contains(paysIn) == false) {
System.out.println("Raté");
}}while (Compteur < 48);
}}
Encore une fois j'ai des bases fébriles, je suis encore débutant donc un peu d'empathie s'il vous plait j'essaie de comprendre.
Merci.
Edit : j'ai tronqué mon ArrayList pour plus de lisibilité.
Ouais, ca stackoverflow ca.
Dans ton objet Pays, tu as une ref vers Pays qui est creer a la construction. Donc le Pays cree un Pays, qui creer un Pays, qui creer un Pays, ...
tiens j'ai repris ta classe et je l'est standardisé:
import java.util.ArrayList;
import java.util.Scanner;
public class Pays {
private String paysIn;
private ArrayList<String> Europe;
public Pays() { //constructeur
paysIn = new String();
Europe = new ArrayList<String>();
Europe.add("Albanie"); Europe.add("Andorre"); Europe.add("Arménie"); Europe.add("Autriche");
Europe.add("Azerbaidjan"); Europe.add("Biélorussie"); Europe.add("Belgique"); Europe.add("Bosnie-Herzégovine");
Europe.add("Bulgarie"); Europe.add("Croatie"); Europe.add( "Chypre"); Europe.add( "Tchéquie"); Europe.add(12, "Danemark");
Europe.add("Estonie"); Europe.add("Finlande"); Europe.add("France");
}
public String getPaysIn() { //getter
return paysIn;
}
public void setPaysIn(String pays) { //setter
paysIn = pays;
}
public void quizz() {
int Compteur = 0;
Scanner sc = new Scanner(System.in);
do {
System.out.println("Compteur = " + Compteur + "/100");
System.out.println("Veuillez taper un nom de pays : ");
setPaysIn(sc.nextLine());
if(Europe.contains(paysIn)) {
Compteur++;
System.out.println("+1 point pour " + paysIn);
}
else
System.out.println("Raté");
}while (Compteur < 48);
sc.close();
}
public static void main(String[] args) {
Pays pays = new Pays();
pays.quizz();
}
}
si t'a des questions
Bonjour, je rentre du taf ( je travaille en Chine)
Je viens de voir vos réponses donc merci dans un premier temps
J'ai testé le code que tu as envoyé vdd et ça marche, j'essaie de le refaire de mon coté, merci pour le coup de main en tout cas !
Juste une question, qu'est ce que je change dans mon constructeur en faisant
ArrayList Europe = new ArrayList();
au lieu de
Europe = new ArrayList();
?
Merci encore
Le 25 avril 2019 à 15:20:49 bosondebite a écrit :
Bonjour, je rentre du taf ( je travaille en Chine)Je viens de voir vos réponses donc merci dans un premier temps
J'ai testé le code que tu as envoyé vdd et ça marche, j'essaie de le refaire de mon coté, merci pour le coup de main en tout cas !
Juste une question, qu'est ce que je change dans mon constructeur en faisant
ArrayList Europe = new ArrayList();
au lieu de
Europe = new ArrayList();
?
Merci encore
il faut que tu déclare ton ArrayList hors du constructeur sinon tu pourra pas y accéder en dehors du constructeur
ArrayList Europe = new ArrayList(); //déclaration et instanciation au même moment dans le même scope
ArrayList Europe; //déclaration en dehors de toute fonction
....
Europe = new ArrayList(); //instanciantion ou tu veux
je sais pas si t'a compris?
Le 25 avril 2019 à 15:39:21 no_lift_69 a écrit :
Le 25 avril 2019 à 15:20:49 bosondebite a écrit :
Bonjour, je rentre du taf ( je travaille en Chine)Je viens de voir vos réponses donc merci dans un premier temps
J'ai testé le code que tu as envoyé vdd et ça marche, j'essaie de le refaire de mon coté, merci pour le coup de main en tout cas !
Juste une question, qu'est ce que je change dans mon constructeur en faisant
ArrayList Europe = new ArrayList();
au lieu de
Europe = new ArrayList();
?
Merci encore
il faut que tu déclare ton ArrayList hors du constructeur sinon tu pourra pas y accéder en dehors du constructeur
D'accord, je vois
J'ai encore beaucoup de chemin à parcourir
si t'a d'autres question hésites pas