Java 一种方法,可以采用字符串格式的整数数组并返回这些数字的平均值

Java 一种方法,可以采用字符串格式的整数数组并返回这些数字的平均值,java,arrays,csv,Java,Arrays,Csv,第一次问问题 好的,我有一个.csv,我用它做了一个字符串数组。我想创建一个方法,从字符串数组中获取数字并返回每行的平均值。这就是我要说的代码 while (scan.hasNextLine()) { line = scan.nextLine(); items = line.split(","); out += String.format("%10s", items[0]); out +

第一次问问题

好的,我有一个.csv,我用它做了一个字符串数组。我想创建一个方法,从字符串数组中获取数字并返回每行的平均值。这就是我要说的代码

 while (scan.hasNextLine()) {

        line = scan.nextLine();
        items = line.split(",");

        out += String.format("%10s", items[0]);
        out += "\t";

        for (int i = 1; i < items.length; i++) {

            out += processData(items[i]);
            out += String.format("%.1s",items[1]);
            out += "\t";

        }

        out += " \n";


    }

    scan.close();
    System.out.println(out);

}

public static double processData(String total) {
    String[] val = total.split(" ");
    double[] array = new double[val.length];
    double lineCount = 0;
    double ave = 0;
    double temp =0;

    for (int i = 0; i < val.length; ++i) {
         lineCount++;
         array[i] += Double.parseDouble(val[i]);
         temp += array[i];
         ave = temp/lineCount;
    }
        return ave;

}
这就是理想的输出应该是什么

elephant   660.3
chimpanzee 239.8
gerbil     23.5
gorilla    257.3
leopard    93.7
orca       531.4

我认为您只需要打印平均值和第一列

StringBuilder strBuilder = new StringBuilder();
while (scan.hasNextLine()) {
    line = scan.nextLine();
    items = line.split(",");

    strBuilder.append(items[0]);
    strBuilder.append("\t");
    double sum = 0;
    for (int i = 1; i < items.length; i++) {
       sum += Double.parseDouble(items[i])
    }

    strBuilder.append(sum/(items.length-1));
    strBuilder.append("\n");
}

scan.close();
System.out.println(out.toString());

for循环
for(int i=1;i
的逻辑是错误的,因为您正在对行的每个项目调用
processData
,但是您应该为每行调用
processData
一次是的,这是正确的,但我不知道如何逐行将其分开。
StringBuilder strBuilder = new StringBuilder();
while (scan.hasNextLine()) {
    line = scan.nextLine();
    items = line.split(",");

    strBuilder.append(items[0]);
    strBuilder.append("\t");
    double sum = 0;
    for (int i = 1; i < items.length; i++) {
       sum += Double.parseDouble(items[i])
    }

    strBuilder.append(sum/(items.length-1));
    strBuilder.append("\n");
}

scan.close();
System.out.println(out.toString());
private static String processLine(String[] items) {
  StringBuilder strBuilder = new StringBuilder(items[0]);
  strBuilder.append("\t");
  double sum = Arrays.stream(items)
    .skip(1)
    .mapToDouble(Double::parseDouble)
    .sum();
  strBuilder.append(sum/(items.length - 1))
  return strBuilder.toString();
}

String out = Files.readAllLines(pathToCsvFile).stream()
    .map(x -> x.split(","))
    .map(x -> processLine(x))
    .collect(Collectors.joining("\n"));