Java 这个错误意味着什么&引用;错误:不兼容类型:可能从double到int的有损转换;我的语法有问题吗?
这是一个java程序,用于计算: 费马的最后一个定理说,不存在这样的整数a、b和c an+bn=cn 除非≤二, 编写一个名为Fermat.java的程序,输入四个整数(a、b、c和n),并检查Fermat定理是否成立。 如果n大于2且an+bn=cn,则程序应显示 “天哪,费马错了!” 否则程序将显示 “不,那不行。” 尝试将Java 这个错误意味着什么&引用;错误:不兼容类型:可能从double到int的有损转换;我的语法有问题吗?,java,Java,这是一个java程序,用于计算: 费马的最后一个定理说,不存在这样的整数a、b和c an+bn=cn 除非≤二, 编写一个名为Fermat.java的程序,输入四个整数(a、b、c和n),并检查Fermat定理是否成立。 如果n大于2且an+bn=cn,则程序应显示 “天哪,费马错了!” 否则程序将显示 “不,那不行。” 尝试将checkFermat中的参数从int设置为double,但未成功 这是我的代码: import java.util.Scanner; public class Fe
checkFermat
中的参数从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
中,它被称为publicstaticdouble-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)
是double
类型。类型应为double
或比double
更处于层次结构位置的任何其他数据类型。如果不是,则存储值为int
,远小于double
,在准确性方面可能会导致数据丢失。可能返回值是一个浮点值,当涉及整数时,这是不可能的,但是范围问题,一些数字的平方可能需要一个非常大的值,无法存储在int
中,因此您看到的错误消息是通知您类型不合适,可能会导致精度损失
如何克服这个问题?1.使用适当的数据类型
(建议)使用预期的数据类型保存返回的数据。
例如:
double result=((Math.pow(a,n))+(Math.pow(b,n))代码>
二,。显式类型转换
明确地说编译器从double
→ int
不太关心数据
例如:intresult=(int)((Math.pow(a,n))+(Math.pow(b,n))代码>有损转换意味着可能发生数据丢失。从double
转换为int
时,数字的小数部分将被丢弃。这是否回答了您的问题?