Java 可能从double到int的有损转换,无法找到符号

Java 可能从double到int的有损转换,无法找到符号,java,int,double,Java,Int,Double,我的程序中出现一个错误: 歌词.java:11:错误:找不到符号 Cube(b); ^ 符号:方法立方体(int) 地点:班级歌词 java:15:错误:不兼容的类型:可能从double到int的有损转换 return Math.pow (b, 3); ^ 2个错误 我在网站上四处查看,结果发现其他人也有这个问题,但我查看了评论,我仍然不理解这个问题,我的代码中没有重复为什么会这样说。我也不理解说找不到符号的错误。请帮帮我,我真的被困在这上面有一段

我的程序中出现一个错误:

歌词.java:11:错误:找不到符号

 Cube(b);
 ^
符号:方法立方体(int)

地点:班级歌词

java:15:错误:不兼容的类型:可能从double到int的有损转换

 return Math.pow (b, 3);
                   ^
2个错误

我在网站上四处查看,结果发现其他人也有这个问题,但我查看了评论,我仍然不理解这个问题,我的代码中没有重复为什么会这样说。我也不理解说找不到符号的错误。请帮帮我,我真的被困在这上面有一段时间了

  import static java.lang.Math.pow;
  import java.util.Scanner;

  public class Lyrics
  {
       public static void main(String []args)
       {
            int b;
            Scanner scan = new Scanner(System.in);
            System.out.println ("Enter a number: ");
            b = scan.nextInt();
            Cube(b);
       }
       public static int cube (int b)
       {
            return Math.pow (b, 3);
       }
}
两个问题:

  • 字母大小写很重要:
    Cube
    Cube
    不同
  • 函数
    cube(int)
    返回一个整数,但是
    Math.pow
    的输出是一个
    双精度的
    您可能应该更改
    cube()
    以返回一个
    double

    然后在
    main
    方法中有更多的代码要编写,以使用调用
    cube
    的结果。有两个问题:

  • 字母大小写很重要:
    Cube
    Cube
    不同
  • 函数
    cube(int)
    返回一个整数,但是
    Math.pow
    的输出是一个
    双精度的
    您可能应该更改
    cube()
    以返回一个
    double


    然后,您可以在
    main
    方法中编写更多代码,以使用调用
    cube
    的结果。第一个问题是简单的打字错误。Java区分大小写,因此
    cube
    cube
    的含义不同。解决方案:1)保持一致,2)使用以小写字母开头的名称作为方法名称。。。按照Java风格指南


    第二个问题是由于
    Math.pow
    的方法签名;看。它以
    双精度
    的形式返回结果。然后尝试将
    double
    作为
    int
    返回,这是一种有损转换

    解决办法包括:

      return b * b * b;   // i.e. don't use `pow`.
    

    第二种方法通过将
    double
    返回到
    int
    来直接解决编译错误。这是告诉编译器有损转换实际上是正常的方式

    您看到的有损转换错误消息指的是,如果
    b
    的值足够大,则
    Math.pow(b,3)
    的结果将太大,无法表示为
    int
    1。有了类型转换,Java将把一个“太大”的浮点数转换成
    Integer.MAX\u VALUE

    第一种解决方案是更快、更简单的代码,但是如果
    b
    太大,计算将自动溢出,您将得到一个无意义的答案


    更新-如果希望始终将溢出视为错误,则:

    return Math.multiplyExact(b, Math.multiplyExact(b, b));
    

    或以上的变体



    1-实际上,编译器不知道
    pow
    的语义,因此不知道“…对于
    b
    的足够大的值”。但是它知道如果方法调用返回足够大的值,那么转换将是有损的。这就是为什么信息会说“可能的有损转换”

    第一个问题是简单的打字错误。Java区分大小写,因此
    cube
    cube
    的含义不同。解决方案:1)保持一致,2)使用以小写字母开头的名称作为方法名称。。。按照Java风格指南


    第二个问题是由于
    Math.pow
    的方法签名;看。它以
    双精度
    的形式返回结果。然后尝试将
    double
    作为
    int
    返回,这是一种有损转换

    解决办法包括:

      return b * b * b;   // i.e. don't use `pow`.
    

    第二种方法通过将
    double
    返回到
    int
    来直接解决编译错误。这是告诉编译器有损转换实际上是正常的方式

    您看到的有损转换错误消息指的是,如果
    b
    的值足够大,则
    Math.pow(b,3)
    的结果将太大,无法表示为
    int
    1。有了类型转换,Java将把一个“太大”的浮点数转换成
    Integer.MAX\u VALUE

    第一种解决方案是更快、更简单的代码,但是如果
    b
    太大,计算将自动溢出,您将得到一个无意义的答案


    更新-如果希望始终将溢出视为错误,则:

    return Math.multiplyExact(b, Math.multiplyExact(b, b));
    

    或以上的变体



    1-实际上,编译器不知道
    pow
    的语义,因此不知道“…对于
    b
    的足够大的值”。但是它知道如果方法调用返回足够大的值,那么转换将是有损的。这就是为什么信息会显示“可能的有损转换”。

    非常感谢,但是您理解其他错误吗?非常感谢,但是您理解其他错误吗?