Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 声明在方法之间使用的变量_Java_Variables_Csv_Formatter - Fatal编程技术网

Java 声明在方法之间使用的变量

Java 声明在方法之间使用的变量,java,variables,csv,formatter,Java,Variables,Csv,Formatter,我需要从csv文件中查找变量,然后使用格式化程序将该变量打印到另一个文件中 此格式化程序本质上是一个模板,用于使用csv文件中包含的不同数据特征打印多个不同的文件 有点像使用同一个格式化文件打印多个不同棒球运动员的球员统计数据 我已经在类中声明了变量(SOI、SGI、SWI),并设置了格式化程序: public class JavaPractice { static double SOI; static double SGI; static double SWI; private Forma

我需要从csv文件中查找变量,然后使用格式化程序将该变量打印到另一个文件中

此格式化程序本质上是一个模板,用于使用csv文件中包含的不同数据特征打印多个不同的文件

有点像使用同一个格式化文件打印多个不同棒球运动员的球员统计数据

我已经在类中声明了变量(SOI、SGI、SWI),并设置了格式化程序:

public class JavaPractice {

static double SOI;
static double SGI;
static double SWI;

private Formatter ei;

public void eorFile(){
    try{
        ei = new Formatter("M:\\MandNDrives\\mwallace\\JAVA for NEMS\\JavaPractice\\eorinput.ind");

    }
    catch(FileNotFoundException e){
        System.out.println("Error");
    }
然后我有另一种方法从csv文件中读取变量:

public void eorDB(){
    String csvFile = "M:\\MandNDrives\\mwallace\\JAVA for NEMS\\EORModule\\NEMSEORDBEX1.csv";
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    try {

        br = new BufferedReader(new FileReader(csvFile));
        br.readLine();
        while ((line = br.readLine()) != null) {

            String [] reservoir = line.split(cvsSplitBy);

            String SOI = reservoir[1];
            String SGI = reservoir[2];
            String SWI = reservoir[3];
        }
    }catch (FileNotFoundException e) {
    }catch (IOException e) {
    }
}
然后,我尝试使用格式化程序打印变量,但这些变量似乎不是从eorDB方法中提取的

public void addData(){

但是,SOI、SGI和SWI变量似乎没有在方法之间正确共享。有什么想法吗?

尝试从循环中调用addData()(这样就不会在每次迭代中覆盖变量)

同样,您意外地声明了具有相同名称的新的局部变量(通过在它们前面包含单词字符串

如果要使用类变量,请不要声明新变量

 while ((line = br.readLine()) != null) {
     String [] reservoir = line.split(cvsSplitBy);
     SOI = reservoir[1]; // do NOT declare a new string here!
     SGI = reservoir[2];
     SWI = reservoir[3];
     addData();          // invoke addData() with current values
 }

但是…很快就会发现,这里不需要类变量(您可以只使用局部变量):


尝试在循环内调用addData()。当前代码会不断覆盖变量,因此它们只会反映您处理的最后一行的正确值。您在循环内重新声明变量……这是错误的。请参阅我的答案。
 while ((line = br.readLine()) != null) {
     String [] reservoir = line.split(cvsSplitBy);
     SOI = reservoir[1]; // do NOT declare a new string here!
     SGI = reservoir[2];
     SWI = reservoir[3];
     addData();          // invoke addData() with current values
 }
 while ((line = br.readLine()) != null) {
     String [] s = line.split(cvsSplitBy);
     String o = s[1];
     String g = s[2];
     String w = s[3];
     ei.format("%d%d%d%n", o, g, w);
 }