CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • French Days
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • French Days
  • RetourHigh-Tech
    • French Days
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : java.lang.StackOverflowError at Pays.<init>(Pays.java:5) J'en peux plus

News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
DébutPage précedente
1
Page suivantePage suivante
BosonDeBite BosonDeBite
MP
Niveau 8
25 avril 2019 à 04:29:33

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. :hap:

Edit : j'ai tronqué mon ArrayList pour plus de lisibilité.

Message édité le 25 avril 2019 à 04:31:06 par BosonDeBite
godrik godrik
MP
Niveau 22
25 avril 2019 à 06:46:43

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, ...

no_lift_69 no_lift_69
MP
Niveau 10
25 avril 2019 à 11:36:53

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

BosonDeBite BosonDeBite
MP
Niveau 8
25 avril 2019 à 15:20:49

Bonjour, je rentre du taf ( je travaille en Chine)

Je viens de voir vos réponses donc merci dans un premier temps :content:

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

no_lift_69 no_lift_69
MP
Niveau 10
25 avril 2019 à 15:39:21

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 :content:

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?

Message édité le 25 avril 2019 à 15:42:43 par no_lift_69
BosonDeBite BosonDeBite
MP
Niveau 8
25 avril 2019 à 15:42:38

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 :content:

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 :-(

no_lift_69 no_lift_69
MP
Niveau 10
25 avril 2019 à 15:48:03

si t'a d'autres question hésites pas

DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
Infos 0 connecté(s)

Gestion du forum

Modérateurs : godrik, LGV
Contacter les modérateurs - Règles du forum

Sujets à ne pas manquer

La vidéo du moment