2011-09-22 4 views
0

Dans le cadre d'une affectation Im essayant d'accéder à une liste de tableaux clonés d'une autre classe pour que je puisse l'utiliser. Mais lorsque j'essaie de le faire, j'obtiens l'erreur suivante: "méthode non statique getConnections() ne peut pas être réfrénée à partir d'un contexte statique".Comment accéder à arrayList cloné non statique pour une utilisation dans une méthode statique en Java

Ceci est le code que j'utilise pour accéder au tableau cloné. C'est dans le contexte de l'élaboration de la meilleure façon de prendre des vols d'une destination à l'autre.

public boolean determineRoute(City from, City to, ArrayList<City> flightRoute) 
{ 
    ArrayList<City> Connections = new ArrayList<City>(); 
    Connections = City.getConnections(); 
    return true; 
} 

Et c'est ainsi que commence le code pour cette classe. Cela commence comme statique mais pour autant que je puisse voir cela ne devrait affecter que la première méthode comment puis-je dire à java que cette méthode ne devrait pas être considérée comme statique afin que je puisse accéder à la liste clonée de la classe non statique?

import java.util.*; 


public class Lab9_Ex2_Main 
{ 
    //////// START-UP ///////// 
    public static void main(String[] args) 
    { 
     new Lab9_Ex2_Main(); 
    } 

J'ai laissé une grande partie du code que je pense qu'il ne peut pas avoir raison de moi de mettre tout en place. Mais si vous avez besoin de plus pour obtenir une image plus claire, j'ajouterai volontiers plus de code.

Ceci est le code d'une autre classe qui contient un tableau cloné auquel j'essaie d'accéder. en fait

import java.util.*; 

// Class: City 
// Purpose: To represent a place in the world that you can fly from/to.  
public class City 
{ 
    private String name;  // The name of the City 
    private ArrayList<City> connectsWith;  // Which cities are connected to this one 

    public City(String cityName) 
    { 
     name = cityName; 
     connectsWith = new ArrayList<City>(); 
    } 

    // Method: addConnection 
    // Purpose: To note that you can catch a flight to the destination, from this city 
    // Passed: 
    //  destination - The City which you can fly to. 
    public void addConnection(City destination) 
    { 
     if (destination != null && destination != this) 
      connectsWith.add(destination); 
    } 

    // Method: getConnections 
    // Purpose: To retrieve a list of cities you can reach from this one. 
    // Note: You are given a clone, (to avoid a privacy leak), and can manipulate it however 
    // you like. E.g. you could delete elements. 
    public ArrayList<City> getConnections() 
    { 
     return (ArrayList<City>) connectsWith.clone(); 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public String toString() 
    { 
     return name; 
    } 
} 
+2

Si vous avez appris à formater votre question proprement le * texte * ne est pas venu comme * code * vous n'auriez pas besoin du charabia au milieu. S'il vous plaît apprendre à utiliser le système au lieu de se moquer de lui ... –

+0

S'il vous plaît essayer et apprendre à formater vos messages sans ajouter "charabia" texte. :) - Edité pour vous. – Thomas

+0

Désolé d'être ennuyeux. Comment est-ce que je formaterais le texte pour qu'il ne se présente pas comme du code? – Binyomin

Répondre

2

City ne fournit pas une méthode statique getConnections(), car cela n'a pas de sens. Les connexions dépendent d'une instance City réelle et si vous en avez accès, vous pouvez appeler getConnections() dessus, même à partir d'une méthode statique.

C'est le commentaire sur la liste de tableau qui est cloné dans getConnections():

// Quelles sont les villes sont connectées à celui-ci

Notez que cela signifie que vous pouvez tout simplement pas obtenir les connexions sans spécifier cette ville (celle pour laquelle vous obtenez les connexions pour) et donc ne peut simplement pas appeler cette méthode sur la classe City seulement.

Commentaire sur la méthode elle-même:

Objectif: récupérer une liste des villes que vous pouvez atteindre à partir celui-ci.


Si l'on suppose votre méthode determineRoute(...) peut être statique, il pourrait ressembler à ceci:

public static boolean determineRoute(City from, City to, ArrayList<City> flightRoute) 
{ 
    ArrayList<City> connections = new ArrayList<City>(); 
    connections = to.getConnections(); //or from.getConnections(); what ever makes sense 

    //connections is not used, so I assume you want to put them into flightRoute 
    flightRoute.addAll(connections); 

    return true; 
} 

Votre logique determineRoute(...) semble tout à fait bizarre. Je suppose que vous voulez calculer l'itinéraire entre la from et la to, ce que vous ne faites pas actuellement. Fixer cela, cependant, est un exercice pour vous.

Vous pouvez ensuite appeler cette méthode dans votre principale méthode (qui a être statique) comme ceci:

public static void main(String... args) { 
    City berlin = new City("Berlin"); 
    City beijing = new City("Beijing"); 

    //fill the connections here 

    ArrayList<City> route = new ArrayList<City>(); 

    boolean success = determineRoute(berlin, beijing, route); 
} 
+0

Merci d'avoir pris le temps de répondre. Alors, pourquoi puis-je obtenir le message d'erreur lorsque j'essaie d'accéder à l'arraylist cloné ?? – Binyomin

+0

oups Je n'ai pas encore vu votre post quand j'ai commenté juste avant. – Binyomin

+0

Oui merci cela fait beaucoup de sens maintenant que vous l'avez expliqué. Bien sûr, je ne peux pas accéder à City car il n'a pas été instancié !! Aha merci. Oui, c'est une mission basée sur la récursivité où les vols ne vont que d'une ville à l'autre et nous avons besoin de déterminer les pays nécessaires pour obtenir leur. – Binyomin

Questions connexes