java - 在第二个 java 文件上使用 import 不允许访问其变量
问题描述
我正在尝试从名为 Prim.java 的主文件中的 Graph.java 中的第二个名为 Graph 的类中访问一个变量。
我尝试过 Graph.variable,并尝试这样做:
import Graph;
但这会收到一条错误消息“预期”。
这是 Prim.java
import java.io.BufferedReader;
import java.io.File; // Import the File class
import java.io.FileNotFoundException; // Import this class to handle errors
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Prim{
int min(boolean [] mst, int [] weights){
int minweights = Integer.MAX_VALUE;
int vert = -1;
for (int i = 0; i <Graph.v ; i++) { // here is the issue
if(mst[i]==false && minweights>weights[i]){
minweights = weights[i];
vert = i;
}
}
return vert;
}
当然,该文件还有更多内容,因此如果需要整个文件,我很乐意发布。
这是整个 Graph.java:
import java.io.BufferedReader;
import java.io.File; // Import the File class
import java.io.FileNotFoundException; // Import this class to handle errors
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Graph{
public static class xGraph{
public int v;
public int m[][];
public xGraph(int vert) {
this.v = vert;
m = new int[vert][vert];
}
public void edges(String start, String end, int weight) {
System.out.print("(" + start + ", " + end + ", " + weight + ") ");
int numStart = convertToNum(start);
int numEnd = convertToNum(end);
m[numStart][numEnd]=weight;
m[numStart][numEnd] = weight;
}
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;
}
}
}
这应该如何实现?非常感谢。
解决方案
在以下情况下,您不必导入 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;
}
}
推荐阅读
- javascript - imgur api图片上传跨域资源共享错误
- python - 如何编写 Python 类来解决给定方程和其他变量值的任何缺失变量?
- coinbase-api - Coinbase 地址 API 端点返回大部分是空数据
- html5-canvas - 如何使用 KONVA 根据每个像素值(R、G、B)设置自定义(某些计算逻辑)颜色
- asp.net-mvc - 在新数据上刷新 Razor 页面
- azure - 无法通过 ARM 模板注册命名空间“Microsoft.AlertsManagement”
- kubernetes - AKS:对所有 Web 请求的长时间延迟(等待 TTFB 具有很大的价值)
- python - 如何在带有“and”和“or”的if语句中使用括号来使用“or”分隔两个选项。请参阅代码以供参考
- c# - 在 ASP.NET 5 WebAPI 中使用 OData 时如何获取分页信息和单个记录
- ajax - 如何在 ajax-cart-template.liquid 中获取产品变体及其标签的库存?