有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java运算符/未定义参数类型float,可选<float>

我是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();
    }
}

我试着做了一个简化:

Optional<Float> sumOfWheightes = wheightes.stream().reduce((prev, next) -> prev + next);

然后我尝试将Optional<Float>除以浮点类型:

System.out.println("A média ponderada é " + weightedAverage / sumOfWheightes);

错误是:

The operator / is undefined for the argument type(s) float, Optional<Float>

我该怎么做这个部门


共 (1) 个答案

  1. # 1 楼答案

    这个错误真的说明了一切——你不能把一个float除以一个Optioanl<Float>,你需要先把它转换成一个float。例如,通过使用orElse

    float sumOfWheightes =
        wheightes.stream().reduce((prev, next) -> prev + next).orElse(1.0f);