java - 这个错误是什么意思?“错误:不兼容的类型:从 double 到 int 的可能有损转换”我的语法有问题吗?
问题描述
这是一个计算费马大定理的 java 程序:费马大定理说没有整数 a 、 b 和 c 使得
a n +b n =c n
除非 n≤2 。
编写一个名为 Fermat.java 的程序,输入四个整数(a、b、c 和 n)并检查 Fermat 定理是否成立。如果 n 大于 2 并且 a n +b n =cn , 程序应该显示
“天哪,费马错了!”</p>
否则程序应该显示
“不,这行不通。”</p>
尝试将参数设置为fromcheckFermat
没有成功。int
double
这是我的代码:
import java.util.Scanner;
public class Fermat{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
checkFermat(1,2,4,1);
}
public static void checkFermat(int a,int b,int c,int n){
int result = ((Math.pow (a,n))+(Math.pow(b,n)));
if ((((Math.pow(a, n)) + (Math.pow(b, n))) == (Math.pow(c, n))) && ((n != 2))) {
System.out.println("Holy smokes, Fermat was wrong!");
}else{
System.out.println("No, that doesn't work.");
}
}
}
这是错误:
code/Fermat.java:11: error: incompatible types: possible lossy conversion from double to int
int result = ((Math.pow (a,n))+(Math.pow(b,n)));
^
1 error
解决方案
您使用的方法位于java.lang.Math
其中public static double pow(double, double)
。它期望基数和指数都是类型double
。由于隐式类型收敛形式int
→在这种情况下(传递整数)工作正常double
,因为 double 具有更高的层次结构、更多的字节数、更高的精度,因此可以存储更大范围的数字。
当您反转操作时,事情变得非常棘手。这其中可以注意到。
code/Fermat.java:11: error: incompatible types: possible lossy conversion from double to int
int result = ((Math.pow (a,n))+(Math.pow(b,n)));
^
1 error
在这里,类型需要从double
→转换,int
因为返回类型Math.pow(double, double)
是 type double
。该类型应该是double
任何其他数据类型,其层次结构位置比double
. 不是,就准确性而言,存储值int
远低于double
并且可能导致数据丢失。也许返回值是一个浮点值,当涉及到整数但范围问题时,这是不可能的,一些数字平方可能需要一个非常大的值,无法存储在int
其中,因此您看到的错误消息是通知您类型是不合适,可能会导致精度下降。
如何克服这一点?
1. 使用适当的数据类型
(推荐)按预期使用数据类型来保存返回的数据。
例如:double result = ((Math.pow (a,n))+(Math.pow(b,n)));
2. 显式类型转换
显式地说编译器从数据中向下转换double
→int
不太关心数据。
例如:int result = (int)((Math.pow (a,n))+(Math.pow(b,n)));
推荐阅读
- angular - Angular 8 上传中的多部分/表单数据
- python - Python/Numba:使用 Numba 扩展 API 创建自定义类型时遇到问题
- docker - docker-compose 将teampeak数据目录挂载为卷的问题
- php - 如何在 html php mysql 表中显示更多结果?
- java - 如何以编程方式查看 android zip 中的内容(无需解压缩)
- html - 在网页上保存更改
- libgdx - LibGDX 布尔值在最小化窗口后变为 false?
- php - 使用 Laravel 6.4 无法将变量数据传递给 PHP 上的 View
- python - 在没有互联网连接的 Windows 7 PC 上安装 Anaconda 以及 Spyder 和 Tensorflow
- javascript - 在角度 2+ 中动态调整元素大小时,您如何考虑滚动条的位置?