Java 这个错误意味着什么&引用;错误:不兼容类型:可能从double到int的有损转换;我的语法有问题吗?

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

这是一个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 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
时,数字的小数部分将被丢弃。这是否回答了您的问题?