-1

エッジ、グラフ、ノード、最短パスの4つのクラスがあります。最短パスクラスの静的メインにあるグラフクラスからメソッドを呼び出したい。私が得ているエラーは、「タイプグラフから非静的メソッドreadFile()への静的参照を作成できません」です。私は私が立ち往生している助けをいただければ幸いです:(!

public class edge<E>{}
public class node<E> extends edge<E>{}

public class graph<E> {
   public node<E> BFS(E value)
   {
    if (adjList.isEmpty())
        return (null);

    ArrayList<node<E>> visitedNodes = new ArrayList<node<E>>(); 

    node<E> sourceNode = adjList.get(0);
    sourceNode.setVisited(true);

    visitedNodes.add(sourceNode); 

    node<E> currNode = null; 

    while(!visitedNodes.isEmpty())
    {
        currNode = visitedNodes.get(0);
        visitedNodes.remove(0);

        if(currNode.getData() == value)
            return (currNode);

        //ListIterator<edge<E>> itr = currNode.incidentEdges.listIterator(); 

        for(node<E> adjNode : adjList) 
        {
            adjNode = adjNode.getChild();

            if(!adjNode.isVisited())
            {
                adjNode.setVisited(true);
                visitedNodes.add(adjNode);
            }

        }

    }
    return (null);
}


public void readFile()
{
File file = new File("Enron-Email.txt");

try 
{
    Scanner scanner = new Scanner(file);

    while (scanner.hasNextLine()) 
    {
        String line = scanner.nextLine();
        if(line.trim().startsWith("#"))
        {
            continue; 
        }

        String[] tokens = line.split("\\t");

        Integer parent = Integer.parseInt(tokens[0]);
        Integer child = Integer.parseInt(tokens[1]);

        addEdge((E) parent, (E) child);
    }
    scanner.close();
} 
catch (FileNotFoundException e) 
{
    e.printStackTrace();
}
}
}    


    public class shortestpath{
public static void main(Integer source, Integer dest) {
    graph<E> myGraph = new graph<E>(); 
    myGraph.readFile();
    myGraph.BFS(source);    
}
}
4

3 に答える 3

1

クラスのメソッドを作成するか、graph.readFile()メソッドをstatic呼び出す必要があります。readFile()instancegraph

最初のケースでは、次のようになります。

public class shortestpath {
    public static void main (String[] args) {
        graph.readFile ();
    }
}

public class graph {
    public static void readFile () {
    }
}

一方、2番目のケースでは、次のようになります。

public class shortestpath {
    public static void main (String[] args) {
        new graph ().readFile ();
    }
}

public class graph {
    public void readFile () {
    }
}

さらに、以下のコードでは小文字のクラス名を使用していますが(質問で指定したとおり)、Javaの世界では、大文字のキャメルケースを使用してクラスに名前を付ける一般的な規則があります。

于 2012-11-17T23:31:30.897 に答える
0

静的メソッドから非静的メソッド呼び出すには、クラスのインスタンスを作成し、そのインスタンスでそのメソッドを呼び出す必要があります。したがって、あなたの場合、Graphクラスのインスタンスを作成し、 ShortestPathクラスのメインメソッドからメソッドを呼び出す必要があります。readFile()

Graph<YourType> g = new Graph<YourType>(); //replace YourType with the type you want to pass like Integer, blah blah...
g.readFile();

編集:

graph<E> myGraph = new graph<E>(); 

する必要があります

graph<Integer> myGraph = new graph<Integer>(); //Or some other valid types. 

E is just an representation of Element. provide a valid element type
于 2012-11-17T23:32:15.717 に答える
0

インスタンスメソッドを呼び出すには、それを呼び出すオブジェクトが必要です。

public class A
{
    public void someMethod()
    {
        ....
    }
}

public class B
{
    public static void main(String[] args)
    {
        A.someMethod(); // ERROR

        A a = new A();
        a.someMethod(); // Correct
    }
}
于 2012-11-17T23:33:25.520 に答える