所以我正在使用Processing从数据文件中绘制地图。我想在类中存储第一行的一些信息。在处理这个类时是一个PApplet的内部类,所以它必须是一个静态类(否则我得到一个错误:静态字段只能在静态或顶级类型中声明)。
public static class PlacesInfo{
static final int totalCount;
static final float xMin;
static final float yMin;
static final float xMax;
static final float yMax;
static final int populationMax;
static final int densityMax;
//Set all static variables once
static{
String[] lines = loadStrings("population.tsv");
String info = lines[0].substring(2); //to delete some useless char
String[] infoInit = split(info, ','); //to parse the data of the first line
totalCount = int(infoInit[0]);
xMin = float(infoInit[1]);
xMax = float(infoInit[2]);
yMin = float(infoInit[3]);
yMax = float(infoInit[4]);
populationMax = int(infoInit[6]);
densityMax = int(infoInit[8]);
}
}
当我运行此代码时,我收到错误,因为我无法使用loadStrings()函数(这是非静态的)。
所以我想要的是拥有可以从“population.tsv”文件初始化的静态最终变量。您有什么想法/建议?
答案 0 :(得分:2)
1)使方法静态,你会没事的 - 必须按顺序编译静态代码。将loadStrings函数放在静态代码块之前。
请注意:但是 - 您可能最好只创建一个静态的“init”方法,该方法在静态代码块中调用。与您当前的实现不同,这将是可命名的和可单元测试的。
2)顺便说一下:你的浮动语法已关闭,必须正确投射。
int i = (int) 1.4f;
3)要初始化静态变量,您可以执行以下操作:
答案 1 :(得分:2)
您无法在静态上下文中运行类方法loadString
。为了从这个上下文中运行它,你需要使loadString
方法也是静态的(或者将它移到静态上下文之外)。
答案 2 :(得分:0)
我在猜测:
String [] lines =(new PApplet())。 loadStrings( “population.tsv”);