在这段代码中我一直得到:
error: incompatible types: possible lossy conversion from long to int
rem = num%16;
1 error
这是我目前使用的代码。
public class BaseConverter{
public static String convertToBinary(long num){
long binary[] = new long[40];
int index = 0;
while(num > 0){
binary[index++] = num%2;
num = num/2;
}
for(int i = index-1; i>= 0;i--){
System.out.print(binary[i]);
}
}
public static String convertToHexadecimal(long num){
int rem;
// For storing result
String str="";
// Digits in hexadecimal number system
char hex[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(num>0)
{
rem = num%16;
str = hex[rem]+str;
num = num/16;
}
}
}
基本上,这段代码可以帮助我设置另一个调用静态方法的程序。但由于这个错误我无法编译。
答案 0 :(得分:0)
您的问题出在rem = num%16;
行,您要为类型为long
的变量指定int
类型的值。
一般规则是应用其中一个算术运算符的结果是正在操作的两种类型中较大的一种。用Java Language Specification, section 15.17的话来说 ,
乘法表达式的类型是其操作数的提升类型。
因此,表达式num%16
的类型为long
,因为num
的类型为long
;即使它的值始终在-15到15之间。将long
表达式分配给int
变量是错误的,而不是显式地转换它。
你可以写
rem = (int) num % 16;
以避免此错误。
答案 1 :(得分:0)
是的,因为这段代码
rem = num%16;
rem是int类型,num是long,需要添加类型转换
rem = (int)num%16;
同时为两个方法添加return语句以便成功编译。
答案 2 :(得分:0)
使用它:
rem = (int) (num % 16);
并且不要忘记你的退货声明:
return str;