可能从long转换为int的有损转换,无法找到错误

时间:2017-07-20 03:47:21

标签: java compiler-errors

在这段代码中我一直得到:

 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;
    }
}
}

基本上,这段代码可以帮助我设置另一个调用静态方法的程序。但由于这个错误我无法编译。

3 个答案:

答案 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;