Stackoverflow java

Fermé
jesuisunpseudo - 10 janv. 2019 à 18:33
 jesuisunpseudo - 10 janv. 2019 à 22:26
Bonjour,

J'ai créer quelque classe pour mentrainer en Java (je suis débutant) et j'ai un stackoverflow mais je ne sais pas d'ou vient le problème..

La ligne qu'il affiche est le toString de Voiture ducoup quand je retire cela marche mais alors il maffiche des référence je comprend pas ce que j'ai fait d'incorrect.

Merci

Voici mon main

package salon;

public class GestionSalon {

	public static void main(String[] args) {
		SalonAuto salon = new SalonAuto();

		Utilisateur p1 = new Utilisateur("Gerard");
		p1.ajouterVoiture(new Voiture("1-BGS-462", p1));
		p1.ajouterVoiture(new Voiture("1-FKS-442", p1));

		salon.inscrire(p1);
		System.out.println(salon.toString());

	}

}


Mes différentes classes :

package salon;

public class SalonAuto {

	private Map<Utilisateur, Set<Voiture>> participants;

	public SalonAuto() {
		participants = new HashMap<>();

	}

	public boolean inscrire(Utilisateur participant) {
		participants.put(participant, participant.getVoitures());
		return true;
	}

	public String toString() {
		return participants.toString();
	}

}



package salon;

public class Utilisateur {

	private String nom;
	private Set<Voiture> voitures = new HashSet<>();

	public Utilisateur(String nom) {
		super();
		this.nom = nom;
	}

	public boolean ajouterVoiture(Voiture voiture) {
		if (voitures.contains(voiture))
			return false;
		return voitures.add(voiture);
	}

	public String getNom() {
		return nom;
	}

	public Set<Voiture> getVoitures() {
		return voitures;
	}

	@Override
	public String toString() {
		return "Utilisateur [nom=" + nom + ", voitures=" + voitures + "]";
	}

}



package salon;

public class Voiture {

	private String nrPlaque;
	private Utilisateur proprietaire;

	public Voiture(String nrPlaque, Utilisateur proprietaire) {
		super();
		this.nrPlaque = nrPlaque;
		this.proprietaire = proprietaire;
	}

	public String getNrPlaque() {
		return nrPlaque;
	}

	public void setNrPlaque(String nrPlaque) {
		this.nrPlaque = nrPlaque;
	}

	public Utilisateur getProprietaire() {
		return proprietaire;
	}

	public void setProprietaire(Utilisateur proprietaire) {
		this.proprietaire = proprietaire;
	}

	@Override
	public String toString() {
		return "Voiture [nrPlaque=" + nrPlaque + ", proprietaire=" + proprietaire + "]";
	}

}








Configuration: Windows / Chrome 71.0.3578.98
A voir également:

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
10 janv. 2019 à 21:03
Bonjour,

Le problème ce sont les toString de Voiture et Utilisateur.

"Voiture [nrPlaque=" + nrPlaque + ", proprietaire=" + proprietaire + "]";
"Utilisateur [nom=" + nom + ", voitures=" + voitures + "]";

La Voiture affiche le propriétaire, dont on affiche les voitures, pour lesquelles on affiche le propriétaire, duquel on affiche les voitures, qui ont un propriétaire, ayant des voitures, etc.

Tu as une récursivité croisé qui boucle à l'infini, mais la pile d'appel (Stack) est limité, donc au delà de 1024 ça dépasse (Overflow) d'où la StackOverflowError.

Modifies comme tu veux, un des toString voire les deux, mais il ne faut pas d'appel récursifs.
0
jesuisunpseudo
10 janv. 2019 à 22:26
D'accord merci je comprend mieux
0