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