Я пытаюсь получить доступ к переменной из второго класса Graph в Graph.java из основного файла Prim.java. Я пробовал Graph.variable, а также пытался: import Graph; Но тот получает ...

0
linda baldwell 10 Апр 2021 в 04:43

1 ответ

Лучший ответ

Вам не нужно импортировать Graph, если:
- оба класса находятся в пакете по умолчанию.
- оба класса находятся в одном пакете.
Кроме того, вам нужно будет инициализировать статический внутренний класс, как это, прежде чем использовать его в классе Prime:

Graph.xGraph xgrph = new Graph.xGraph(10);
for (int i = 0; i <xgrph.v ; i++) { 
     //code
}

Обратите внимание, что здесь xGraph - статический внутренний класс, но его поля v и m[][] не являются статическими. Итак, вам нужен экземпляр внутреннего класса для доступа к полям.
Если у вас есть разные версии графиков, например xGraph, yGraph, specialGraph, то вы можете использовать наследование:

public class Test
{

    public static void main(String[] args) throws Exception
    {
        Graph grph = new xGraph(10);
        for (int i = 0; i <grph.getV() ; i++) { 
           //code
        }
    }
}

interface  Graph{

    public int getV();
    public int[][] getM();
    public void edges(String start, String end, int weight);
    
    //helper methods
    public static int convertToNum(String s) {
        char ss = s.charAt(0);
        int num = 0;
        for (char a = 'a'; a <= 'z'; a++) {
            if (a == ss) {
                num = (a-'a');
            }
        }
        return num;
    }
}

class xGraph implements Graph {
    private  int v;
    private int m[][];

    public xGraph(int vert) {
        this.v = vert;
        m = new int[vert][vert];
    }

    
    @Override
    public void edges(String start, String end, int weight) {
        System.out.print("(" + start + ", " + end + ", " + weight + ") ");
        int numStart = Graph.convertToNum(start);
        int numEnd = Graph.convertToNum(end);
        m[numStart][numEnd]=weight;            
        m[numStart][numEnd] = weight;
    }


    @Override
    public int getV() {
        return this.v;
    }


    @Override
    public int[][] getM() {
        return this.m;
    }
}
0
onkar ruikar 10 Апр 2021 в 02:20