IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces Graphiques en Java Discussion :

besoin d'aide ( j'ai 2 méthodes qui ont similaire avec des petites différences est ce que je peux l'optimiser


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 31
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut besoin d'aide ( j'ai 2 méthodes qui ont similaire avec des petites différences est ce que je peux l'optimiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public static Graph loadSingleFile(Path path)
        {
            Graph graph = new Graph();
            BufferedReader bufferedReader;
            try
            {
                bufferedReader = new BufferedReader(new FileReader(path.toFile()));
                String line = null;
                String[] vertices;
                while ((line = bufferedReader.readLine()) != null)
                {
                    vertices = line.split(" ");
                    if (vertices.length < 2)
                    {
                        continue;
                    }
                    graph.addEdge(Integer.parseInt(vertices[0]),Integer.parseInt(vertices[1]));
                }
                bufferedReader.close();
                return graph;
        static Graph loadMultipleFiles(Path[] paths, PropertyType propertyType)
        {
            Graph graph =
                propertyType == PropertyType.DOUBLE ? new Graph<Double>(propertyType) : new Graph<Long>(propertyType);
            for (Path path : paths)
            {
                BufferedReader bufferedReader;
                try
                {
                    bufferedReader = new BufferedReader(new FileReader(path.toFile()));
                    String line = null;
                    String[] vertices;
                    while ((line = bufferedReader.readLine()) != null)
                    {
                        vertices = line.split(" ");
                        if (vertices.length < 3)
                        {
                            continue;
                    }
    switch (propertyType)
                        {
                        case DOUBLE:
                            graph.addEdge(Integer.parseInt(vertices[0]),Integer.parseInt(vertices[1]),
                                Double.parseDouble(vertices[2]));
                            break;
                        case LONG:
                            graph.addEdge(Integer.parseInt(vertices[0]),Integer.parseInt(vertices[1]),
                                Long.parseLong(vertices[2]));
                            break;
                        default:
                            break;
                        }
                    bufferedReader.close();
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
            return graph;
        }

  2. #2
    Expert confirmé Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 444
    Points : 4 564
    Points
    4 564
    Par défaut
    Oui, en commençant par gérer les cas d'exception correctement.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ça me semble difficile de fusionner les deux méthodes dans la mesure où l'une d'elles utilise 2 valeurs pour construire les segments et l'autre 3. Mais on peut imaginer un système de fabrique pour les nœuds.

    Quelque chose comme çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    private static Graph<Integer> load(Path path) throws IOException {
    		return loadGraph(null, path);
    	}
     
    	private static <T> Graph<T> load(PropertyType ptype, Path...paths) throws IOException {
    		return loadGraph(ptype.getFactory(), paths);
    	}
     
    	private static <T> Graph<T> loadGraph(Function<String,T> parser, PropertyType ptype, Path...paths) throws IOException {
    		Graph<T> graph = ptype==null?new Graph<>():new Graph<>(ptype);
    		for(Path path : paths) {
    			try(BufferedReader reader = Files.newBufferedReader(path)) {
    				for(String line = reader.readLine(); line!=null; line = reader.readLine()) {
    					String[] vertices = line.split(" ");
    	                if (vertices.length >= 2) {
    	                	final int x = Integer.parseInt(vertices[0]);
    	                	final int y = Integer.parseInt(vertices[1]);
    	                	if(  parser!=null ) {
                                         if ( vertices.length>2 ) {
    	                		graph.addEdge(x, y, parser.apply(vertices[2]));
                                         }
    	                	}
    	                	else {
    	                		graph.addEdge(x, y);
    	                	}
    	                }
    				}
    			}
    		}
    		return graph;
    	}
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public enum PropertyType {
    	DOUBLE(Double::parseDouble), LONG(Long::parseLong);
     
    	private final Function<String, ?> parser;
    	private PropertyType(Function<String, ?> parser) {
    		this.parser=parser;
    	}
    	public <T> Function<String, T> getFactory() {
    		return (Function<String, T>) parser;
    	}
     
    }
    Bien sûr ce serait plus simple si le constructeur de Graph prenait le même nombre de paramètres quelque soit le cas... d'ailleurs à quoi ça sert de lui passer un PropertyType en paramètre ?

  4. #4
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    tu peux peut-etre mettre des id en fonction de tes deux types d'objet graph, et en fonction de l'appel, tu changes le reader.
    Mais parfois, mieux vaut faire 2 méthodes, même quasi similaires plutôt que de vouloir refactorer à outrance et que le code ne soit plus claire.
    La propreté du code passe aussi par sa clareté.

Discussions similaires

  1. [XL-2007] Besoin d'aide pour créer un tableau qui va incrémenter automatiquement des onglets
    Par Bernardini dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2015, 17h40
  2. 4 CVs qui ont plu a des recruteurs en 2011
    Par gangsoleil dans le forum CV
    Réponses: 10
    Dernier message: 13/03/2012, 14h06
  3. Besoin d'aide pour une gestion d'un multi fork avec chien degarde.
    Par Baradhur dans le forum Threads & Processus
    Réponses: 11
    Dernier message: 21/01/2011, 09h28
  4. [PL/SQL]Procédure qui se compile avec des erreurs
    Par yoann7 dans le forum PL/SQL
    Réponses: 12
    Dernier message: 17/03/2009, 11h09
  5. Réponses: 2
    Dernier message: 24/02/2008, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo