Java 可能从double到int的有损转换,无法找到符号
我的程序中出现一个错误: 歌词.java:11:错误:找不到符号Java 可能从double到int的有损转换,无法找到符号,java,int,double,Java,Int,Double,我的程序中出现一个错误: 歌词.java:11:错误:找不到符号 Cube(b); ^ 符号:方法立方体(int) 地点:班级歌词 java:15:错误:不兼容的类型:可能从double到int的有损转换 return Math.pow (b, 3); ^ 2个错误 我在网站上四处查看,结果发现其他人也有这个问题,但我查看了评论,我仍然不理解这个问题,我的代码中没有重复为什么会这样说。我也不理解说找不到符号的错误。请帮帮我,我真的被困在这上面有一段
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
的足够大的值”。但是它知道如果方法调用返回足够大的值,那么转换将是有损的。这就是为什么信息会显示“可能的有损转换”。非常感谢,但是您理解其他错误吗?非常感谢,但是您理解其他错误吗?