循环中的Java字符串数组作用域



这是一个相当简单的Java范围界定问题,但我对Java还很陌生,很难弄清楚。具体来说,这是针对Android应用程序的,但我不确定这对这个问题是否重要

我有一个方法可以获取SQLite表数据并将其写入CSV文件。根据传递到方法中的数据类型,我想从不同的表中写入数据:

public void exportSubjectData(File outputFile, String subNum, String sensorType) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
String arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
break;
}
}
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}

我的问题是,根据传入的sensorType,我想1)从不同的表中进行选择,2)写出不同数量的列。我在switch块中声明并初始化arrStr,但当我尝试将每列写入CSV时,while块无法访问arrStr。大概这是一个范围界定问题。解决这个问题的正确方法是什么?

当我试图在交换机外声明arrStr时,我得到了一个意外的令牌错误:

String[] arrStr;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr[] = {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
}

我也尝试过以下方法,但android工作室抱怨arrStr可能没有初始化:

String[] arrStr;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[]{curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[]{curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),curCSV.getString(3), curCSV.getString(4)};
break;
}
}

尝试这样声明数组变量(在switch之外):

public void exportSubjectData(File outputFile, String subNum, String sensorType) throws IOException, SQLException {
csvWrite = new CSVWriter(new FileWriter(outputFile));
String arrStr[] = null;
switch (sensorType) {
case "acc": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_ACC_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[] {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2),
curCSV.getString(3), curCSV.getString(4)};
break;
}
case "gyro": {
curCSV = db.rawQuery("SELECT * FROM " + DATA_GYRO_TABLE_NAME + " WHERE id = " + subNum, null);
arrStr = new String[] {curCSV.getString(0), curCSV.getString(1), curCSV.getString(2)};
break;
}
}
csvWrite.writeNext(curCSV.getColumnNames());
while (curCSV.moveToNext()) {
csvWrite.writeNext(arrStr);
}
csvWrite.close();
curCSV.close();
}

最新更新