Programmer en java

  • Auteur de la discussion Prgmjava
  • Date de début

Prgmjava

Nouveau membre
Bonjour à tous !

J'ai créé un programme en java pour essayer de trouver une chaîne améliorante dans un réseau d'irrigation. Seulement, lorsque je teste mon programme et que je lui demande de me renvoyer la chaîne améliorante, il me renvoie l'ensemble vide et je n'arrive pas à savoir ce qui ne va pas dans mon programme. Pourriez-vous m'aider à trouver mon erreur ?
J'ai créé une classe ConnexionVille(int origine, int destination, int capacite, int debit). J'ai ensuite créé un tableau tel que à la ligne i je rentre les connexionVille de la ville i. Aussi, la ville 0 correspond à la ville de départ et la ville numéro nombreVilles-1 est la ville d'arrivée. J'ai créé une autre classe Canalisation(int origine, int destination, int capaciteRestante) (avec capaciteRestante=capacite-debit). Cette classe me permet ensuite de créer une ArrayList contenant les canalisations de la chaîne améliorante. Merci d'avance pour votre aide :), j'espère que vous comprendrez mon code que voici :

Java:
import java.util.ArrayList;


public class Algorithme {
	private ConnexionVille[][] cv; //tableau des connexions des villes
	private  boolean[] villesVisitees; //tableau permettant le marquage des villes traversées : si la ville i est traversée, villesVisitees[i]=true, sinon c'est false
	private int nombreVilles; //nombre de villes du réseau donné
	private ArrayList<Canalisation> itineraire; //liste des canalisations de la chaîne améliorante


	//Constructeur
	public Algorithme(ConnexionVille[][] cv, boolean[] villesVisitees, int nombreVilles){
		this.cv=cv;
		this.nombreVilles=nombreVilles;
		this.villesVisitees=villesVisitees;

	}


	//méthode ChaineAmeliorante() permettant de trouver une chaîne améliorante
	public ArrayList<Canalisation> ChaineAmeliorante(int nombreVilles){
		int pointeur=0; //"pointeur" permet de localiser la ligne de cv que nous traitons. "pointeur" correspond donc aussi à la ville où nous sommes
		itineraire=new ArrayList<Canalisation>(); //nous créons la liste qui donnera la chaîne améliorante

		while (villesVisitees[nombreVilles-1]=false){ //nous cherchons une chaîne améliorante, elle s'arrête lorque l'on est arrivé à la ville que l'on souhaite irriguer qui est identifiée par le plus grand entier, soit nombreVilles-1
			int origine=pointeur; 
			//cherchons la canalisation partant de la ville "pointeur" qui a la plus grande capacité restante
			int max=0;
			for(int i=0; i<cv[pointeur].length; i++){
				int a=cv[pointeur][i].getCapacite()-cv[pointeur][i].getDebit();
				if((max<a) && (villesVisitees[i]==false)){
					max=a;
				}
			}
			for(int i=0; i<cv[pointeur].length; i++){
				if(max==cv[pointeur][i].getCapacite()-cv[pointeur][i].getDebit()){
					pointeur=cv[pointeur][i].getDestination();
					villesVisitees[pointeur]=true;
					Canalisation e=new Canalisation(origine, pointeur, max); //e est une canalisation de la chaîne améliorante
					itineraire.add(e);
				}
			}
		}
		return itineraire;
	}


	//Méthode Flot() calculant le flot de la chaîne améliorante
	public int Flot(){
		//initialisons le flot par 0
		int flot=0;
		for(int i=0; i<itineraire.size(); i++){
			if (itineraire.get(i).getCapaciteRestante()>flot){
				flot=itineraire.get(i).getCapaciteRestante();
			}
		}
		return flot;
	}

	//Méthode sendDebit() permettant d'envoyer du débit dans la chaîne améliorante trouvée
	public void sendDebit(){
		int colonne=0;
		for (int i=0; i<itineraire.size(); i++){
			int origine=itineraire.get(i).getOrigine();
			for (int j=0; j<nombreVilles-1; j++){ //cherchons la colonne où est rangée la canalisation dans cv
				if(itineraire.get(i).getDestination()==cv[origine][j].getDestination()){
					colonne=j;
				}
			}
			cv[origine][colonne].setDebit(Flot());
		}
	}
	
	public ArrayList<Canalisation> getChaineAmeliorante(){
		return itineraire;
	}
	
	public int getFlot(){
		return Flot();
	}
	

}
 

zeb

Modérateur
Bonjour,

Merci de modifier le message pour respecter le règlement.
Ici, le code ne se présente pas avec les balises [i]..[/i] comme tu l'as fait, mais avec les balises [code]..[/code].
 

zeb

Modérateur
Yeah ! Et en plus il sait écrire "au temps pour moi".
Par contre, je ne suis que le modo, je ne suis là que pour faire mon pénible.
Je ne peux pas t'aider plus, en tout cas, pas en Java.
Note cependant un petit effet de bord bénéfique : ton topic remonte en haut à chaque remarque. :lol:

Attendons donc un cador en Java !

_______________
Edit : J'ai précisé le nom du langage pour faire plus zoli. ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 841
Membres
1 586 371
Dernier membre
buntop
Partager cette page
Haut