Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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 在CSV文件中有多个记录时打印特定数据和计算 标题_Java_File_Csv - Fatal编程技术网

Java 在CSV文件中有多个记录时打印特定数据和计算 标题

Java 在CSV文件中有多个记录时打印特定数据和计算 标题,java,file,csv,Java,File,Csv,上面的程序正确读取文件,读取并打印所有记录,但对于我的平均日期,它是计算每个记录的日期,而不是计算所有的日期。我是一个新手,对Java非常陌生,我看不出我做错了什么。另一个问题是,我不知道如何计算每列的最小/最大数据。直截了当地说,我不知道怎么做 要计算平均值,您必须首先计算总数并将其除以元素数。因此,每次读取数据时,初始化total,并在while循环中求和 import java.io.BufferedReader; import java.io.FileNotFoundExceptio

上面的程序正确读取文件,读取并打印所有记录,但对于我的平均日期,它是计算每个记录的日期,而不是计算所有的日期。我是一个新手,对Java非常陌生,我看不出我做错了什么。另一个问题是,我不知道如何计算每列的最小/最大数据。直截了当地说,我不知道怎么做

要计算平均值,您必须首先计算总数并将其除以元素数。因此,每次读取数据时,初始化
total
,并在while循环中求和

 import java.io.BufferedReader;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;

 public class CSVReader {
   public static void main(String[] args) {
    CSVReader obj = new CSVReader();
    obj.run();
 }

 public void run() {
  String CSVFile = "/Users/Wyatt/CSVFile2.csv";
  BufferedReader br = null;
  String Line = "";
  String analysisStr;
  String CSVDelimiter = ",";
  int analysis;
  double AVGDate = 0;

  BufferedReader console = new BufferedReader(new InputStreamReader(System.in));

  try {
      br = new BufferedReader(new FileReader(CSVFile));
      while ((Line = br.readLine()) != null) {
          String[] Weather = Line.split(CSVDelimiter);
          System.out.println("Weather [Date: " 
                      + Double.parseDouble(Weather[0]) + ", Interval: " 
                      + Double.parseDouble(Weather[1]) + ", Rainfall: " 
                      + Double.parseDouble(Weather[2]) + ", Sunlight: " 
                      + Double.parseDouble(Weather[3]) + ", Time: " 
          + Double.parseDouble(Weather[4]) + ", Total: " 
                     + Double.parseDouble(Weather[5]) + ", Overall: " 
                      + Double.parseDouble(Weather[6]) + "]");
          AVGDate = (Double.parseDouble(Weather[0]) / 804);
          System.out.println(AVGDate);
      }     

    System.out.println("What data is wanted?");
    analysisStr = console.readLine();
    analysis = Integer.parseInt(analysisStr);

    if(analysis == 0) {
        System.out.println("Date.");
        System.out.println("Minimum date is:");
        System.out.println("Maximum date is:");
        System.out.println("Average date is: " + AVGDate);
    }
    else if(analysis == 1) {
        System.out.println("Interval.");
        System.out.println("This data isn't useful.");
    }

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();    
} finally {
    if (br != null) {
        try {
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

    System.out.println("Done.");

    }

   }
现在关于计算最小值或最大值

double total = 0.0

while(...) {
    ...
    total += Double.parseDouble(Weather[0]);
}
AVGDate = total / 804;
double minDate=double.MAX_值;
double maxDate=double.MIN_值;
而(…){
//解析每个数据
双温=天气[0];
如果(温度最大日期){
maxDate=温度;
}
}

还请记住,我们对非最终变量命名使用约定。

平均日期是多少?为什么要除以804?为什么不将
AVGDate
的所有计算值相加,然后除以记录数?使用a表示干净的代码。我用它得到的输出不正确,如果我这样做,系统似乎只读取第一条记录?这是我的代码:,输出是最小日期是:1.7976931348623157E308最大日期是:4.9E-324平均日期是:1943。5796019900497@user3135026当我编写
while(…){}
时,这并不意味着必须引入一个新的
while
循环。我的意思是将代码包含到已经存在的
while
循环中,平均值不起作用,它是将每个日期分别除以804,而不是将它们相加?再次感谢您在
之前初始化
total
循环并保持
total+=Double.parseDouble(天气[0])
中,而
循环。在
while
循环后进行平均。
double minDate = Double.MAX_VALUE;
double maxDate = Double.MIN_VALUE;
while(...) {
    // parse each data
    double temp = Weather[0];    
    if(temp < minDate) {
        minDate = temp;
    }

    else if(temp > maxDate) {
        maxDate = temp;
    }
}