Cube(b);
^
地点:课堂歌词
错误:不兼容类型:从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);
}
}
第一个问题是一个简单的错别字。Java区分大小写,因此cube
和cube
的意思是不同的。解决方案:1)保持一致,和2)使用小写字母开头的名称作为方法名...根据Java风格指南。
第二个问题是由于math.pow
的方法签名;请参阅Javadoc。它以double
的形式返回结果。然后尝试将double
作为int
返回,这是一个有损的转换。
解决方案包括:
return b * b * b; // i.e. don't use `pow`.
return (int) Math.pow(b, 3);
您看到的有损转换错误消息表明,对于b
的值足够大,math.pow(b,3)
的结果将太大,无法表示为int
1。类型转换到位后,Java将把“太大”的浮点数转换为integer.max_value
。
第一种解决方案是更快、更简单的代码,但如果b
太大,计算就会静默溢出,你会得到一个无厘头的答案。
更新-如果希望溢出始终被视为错误,则:
return Math.multiplyExact(b, Math.multiplyExact(b, b));
或
return Math.toIntExact((long) Math.pow(b, 3));
或上面的变体。
1-实际上,编译器不知道pow
的语义,因此它不知道“...对于b
的足够大的值...”。但是它知道如果方法调用确实返回了一个足够大的值,那么转换将是有损的。这就是为什么消息上写着“可能的有损转换”。
所以我最近写了以下代码: 当我尝试使用cmd运行它时,它一直显示以下内容: 有人能帮我解释一下我犯的错误吗?
问题内容: 所以我最近写了下面的代码: 但是,它一直显示: 当我尝试使用cmd运行它时。 有人可以帮助并解释我所犯的错误吗?任何帮助表示赞赏:)。谢谢! 问题答案: 当您转换到,值的精度损失。例如,当您将4.8657(double)转换为int时,int值将为4.Primitive 不存储十进制数字,因此您将丢失0.8657。 在您的情况下,0.7是一个双精度值(除非提到float-0.7f,否则
问题内容: 我已经定义了数组gx,数组arr为短型。但是为什么左边的运算可能会以int类型结束,而我必须将其转换为short?编译器错误可能是从int到short的有损转换。 这是我的代码。 } 那是因为所谓的拆箱吗?因此,这意味着我每次进行手术时都需要进行投射吗? 问题答案: 它不是开箱;这是“二进制数值提升”。 JLS的第5.6.2节规定: 当运算符将二进制数字提升应用于一对操作数时,每个操作
我试图用java将十六进制数据写入我的串口,但是现在我不能将十六进制数据转换成字节数组。 以下是显示错误消息的代码: 这是写入串行端口的代码: 我能知道如何解决这个问题吗?目前我正在使用javax.comm插件。谢谢。
目前,我正在使用链表,但是我有一个代码问题。下面的代码运行正常,但是当我试图用a添加一些节点来生成随机数时,它给了我这个错误。在为代码添加之前,运行添加,现在您可以在main中看到。也许我错过了什么。有人能帮我理解一下吗? 附言:评论部分是我试图“升级”的主要部分。
我希望输入一个和另一个ex: 1和1000000000,现在我希望创建一个大小为1000000000的数组。然后在数组的每个索引处,存储int val,ex:。 当我尝试执行此操作时,Netbeans 会向我显示此行中的错误: “可能从long到int的有损转换”。这是我的密码:-