使数组/矩阵可用于程序中的其他方法。

时间:2012-11-27 21:45:04

标签: java multidimensional-array processing

我在处理中有一些代码,它读取CSV文件并将其转储到数组中。然后我需要在各种方法中使用这些数据来绘制一些令人兴奋的图形。

但是在下面的代码中当我尝试运行字形方法时,我得到一个异常,程序无法找到任何名为DSA的东西。谁能指出我正确的方向?有人告诉我,我应该在定义字符串之前放置“public”,但这只会导致另一个错误(意外令牌)。

  void setup() {

  cp5 = new ControlP5(this);  
  cp5.addButton("Overview")
  .setValue(0)
  .setPosition(840, 10)
  .setSize(100, 19);

  cp5.addButton("Quadrant")
  .setValue(0)
  .setPosition(840, 30)
  .setSize(100, 19);

  cp5.addButton("Location Map")
  .setValue(0)
  .setPosition(840, 50)
  .setSize(100, 19);

String [][] DSA = readFile("DSA.csv");
String [][] NC = readFile("NC.csv");
String [][] IW = readFile("IW.csv");

  size(950, 600);
  smooth();
  //noStroke();
  //Use system font 'Arial' as the header font with 12 point type
  h1 = createFont("Arial", 12, false);
  //Use system font 'Arial' as the label font with 9 point type
  l1 = createFont("Arial", 9, false);

}
String [][] readFile(String fileName) {
  //for importing csv files into a 2d array
  //by che-wei wang

  String lines[] = loadStrings(fileName);
  String [][] csv;
  int csvWidth=0;

  //calculate max width of csv file
  for (int i=0; i < lines.length; i++) {
    String [] chars=split(lines[i], ',');
    if (chars.length>csvWidth) {
      csvWidth=chars.length;
    }
  }

  //create csv array based on # of rows and columns in csv file
  csv = new String [lines.length][csvWidth];

  //parse values into 2d array
  for (int i=0; i < lines.length; i++) {
    String [] temp = new String [lines.length];
    temp= split(lines[i], ',');
    for (int j=0; j < temp.length; j++) {
      csv[i][j]=temp[j];
    }
  }
  return csv;
}

void Gluph() {
    println(DSA[1][3])
}

2 个答案:

答案 0 :(得分:1)

这是一个范围问题。阅读变量范围。

一种解决方案是您可以在全局空间中声明变量。现在它们在setup()函数中声明,并且一旦setup()退出,变量就不再可用于其他函数,因为它们是在setup()范围内声明的。如果您在setup()之前声明它们,那么在程序的第一行,您将可以在全局范围内访问它们。

如果你需要在setup中继续readFile(),那么只需在全局范围内声明变量并在setup()中赋值。由于变量是在全局范围内声明的,因此无论您从何处访问它们,setup()范围内的更改仍将得到反映。

String [][] DSA;
String [][] NC;
String [][] IW;   

void setup() {

  cp5 = new ControlP5(this);  
  cp5.addButton("Overview")
  .setValue(0)
  .setPosition(840, 10)
  .setSize(100, 19);

  cp5.addButton("Quadrant")
  .setValue(0)
  .setPosition(840, 30)
  .setSize(100, 19);

  cp5.addButton("Location Map")
  .setValue(0)
  .setPosition(840, 50)
  .setSize(100, 19);

  DSA = readFile("DSA.csv");
  NC = readFile("NC.csv");
  IW = readFile("IW.csv");

  size(950, 600);
  smooth();
  //noStroke();
  //Use system font 'Arial' as the header font with 12 point type
  h1 = createFont("Arial", 12, false);
  //Use system font 'Arial' as the label font with 9 point type
  l1 = createFont("Arial", 9, false);

}
String [][] readFile(String fileName) {
  //for importing csv files into a 2d array
  //by che-wei wang

  String lines[] = loadStrings(fileName);
  String [][] csv;
  int csvWidth=0;

  //calculate max width of csv file
  for (int i=0; i < lines.length; i++) {
    String [] chars=split(lines[i], ',');
    if (chars.length>csvWidth) {
      csvWidth=chars.length;
    }
  }

  //create csv array based on # of rows and columns in csv file
  csv = new String [lines.length][csvWidth];

  //parse values into 2d array
  for (int i=0; i < lines.length; i++) {
    String [] temp = new String [lines.length];
    temp= split(lines[i], ',');
    for (int j=0; j < temp.length; j++) {
      csv[i][j]=temp[j];
    }
  }
  return csv;
}

void Gluph() {
    println(DSA[1][3])
}

答案 1 :(得分:0)

您希望将DSA设为类变量。我这里没有看到类定义,但它会是这样的:

class blah{
  String [][] DSA;

  void setup() {

  cp5 = new ControlP5(this);  
  cp5.addButton("Overview")
  .setValue(0)
  .setPosition(840, 10)
  .setSize(100, 19);

  cp5.addButton("Quadrant")
  .setValue(0)
  .setPosition(840, 30)
  .setSize(100, 19);

  cp5.addButton("Location Map")
  .setValue(0)
  .setPosition(840, 50)
  .setSize(100, 19);

  DSA = readFile("DSA.csv");
String [][] NC = readFile("NC.csv");
String [][] IW = readFile("IW.csv");

  size(950, 600);
  smooth();
  //noStroke();
  //Use system font 'Arial' as the header font with 12 point type
  h1 = createFont("Arial", 12, false);
  //Use system font 'Arial' as the label font with 9 point type
  l1 = createFont("Arial", 9, false);

}

}