[英]The operator / is undefined for the argument type(s) float, Optional<Float>
I'm new in Java Language and I was trying to calculate a weighted average:我是 Java 语言的新手,我试图计算加权平均值:
import java.util.ArrayList;
import java.util.Optional;
import java.util.Scanner;
public class App {
public static void main(String[] args) throws Exception {
Scanner keyboard = new Scanner(System.in);
ArrayList<Float> grades = new ArrayList<Float>();
ArrayList<Float> wheightes = new ArrayList<Float>();
int count = 0;
while(count < 3) {
float grade = keyboard.nextFloat();
grades.add(grade);
count += 1;
}
System.out.println("Digite 1 para média ponderada e 2 para aritmética");
int whichAverage = keyboard.nextInt();
switch(whichAverage){
case 1:
float average = 0;
for (int i = 0; i < grades.size(); i++) {
average += grades.get(i);
}
System.out.println("A média aritmética é " + average / grades.size());
case 2:
System.out.println("Informe os 3 pesos:");
float weightedAverage = 0;
for (int i = 0; i < 3; i++) {
float wheight = keyboard.nextFloat();
wheightes.add(wheight);
weightedAverage += grades.get(i) * wheightes.get(i);
}
Optional<Float> sumOfWheightes = wheightes.stream().reduce((prev, next) -> prev + next);
System.out.println("A média ponderada é " + weightedAverage / sumOfWheightes);
default:
System.out.println("Digite 1 ou 2");
}
keyboard.close();
}
}
I tried to do a reduce:我试图做一个减少:
Optional<Float> sumOfWheightes = wheightes.stream().reduce((prev, next) -> prev + next);
Then I tried to divide a Optional<Float>
with a float type:然后我尝试将Optional<Float>
与 float 类型分开:
System.out.println("A média ponderada é " + weightedAverage / sumOfWheightes);
The error is:错误是:
The operator / is undefined for the argument type(s) float, Optional<Float>运算符 / 未定义参数类型 float, Optional<Float>
How can I do this division?我怎样才能做到这一点?
The error really says it all - you can't divide a float
by an Optioanl<Float>
, you need to convert it to a float
first.错误确实说明了一切 - 您不能将float
除以Optioanl<Float>
,您需要先将其转换为float
。 Eg, by using orElse
:例如,通过使用orElse
:
float sumOfWheightes =
wheightes.stream().reduce((prev, next) -> prev + next).orElse(1.0f);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.