CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • 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 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

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

BosonDeBite
BosonDeBite
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
Niveau 30
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
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
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
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
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
Niveau 10
25 avril 2019 à 15:48:03

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

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment