当前位置: 首页 > 知识库问答 >
问题:

(Java)不兼容的类型:可能的有损转换从长整型到int [重复]

杨晓博
2023-03-14

这是我的代码。我想显示月份的名称而不是数字。但是我的代码中有一个错误。

import java.util.Scanner;
import java.util.Date;

public class myIDCard{
    public static void main(String[] args){
        long myID;
        long a,b,c,a1,a2,a3;
        
        Scanner in = new Scanner(System.in);
        System.out.print("Enter your Name: ");
        String name = in.nextLine();
        System.out.print("Enter your IC number without dash: ");
        myID = in.nextLong();
        in.nextLine();
        
        a = myID/1000000;
        b = myID/10000%100;
        c = myID%10000;
        a1 = a%100;
        a2 = a/100%100;
        a3 = a/10000;
        String[] months = {"Jan", "Feb", "Mac", "Apr", "May", "Jun", "Jly", "Aug", "Sep", "Oct", "Nov", "Dis"};
        String month = months[a2 - 1];
        System.out.println();
        System.out.println("Your name : " + name);
        System.out.println("Your IC number : " + a + "-" + b + "-" + c);
        System.out.println("Your Birth date : " + a1 + "/" + month + "/" + a3);
        
        if (c % 2 == 0)
            System.out.println("Your Gender is : Female");
        else
            System.out.println("Your Gender is : Male");
    }
}

它说“不兼容的类型:可能的有损转换从长到整数”。我的代码中的错误是:-

String month = months[a2 - 1];

共有2个答案

上官兴昌
2023-03-14

您需要将其转换为int

String month = months[(int)a2 - 1];
令狐和裕
2023-03-14

<code>long</code>比<code>int</code>使用更多的位,因此它可以容纳比<code>int</code>更大的数字。可以说,它有更多的数字。就像你可以用3位数字(0到999)来表示一个比2位(0到99)更大的数字一样,longint相比也是如此,除了数字以2为基数而不是以10为基数。这些数字称为位。

程序员出错的一个常见原因是在需要< code>int的地方使用了< code>long。在某些语言中,编译器会生成将< code>long隐式转换为< code>int的代码。如果幸运的话,您可能会得到一个编译器警告。如果幸运的话,< code>long中的值将适合< code>int中的值,所以程序的逻辑仍然是正确的。如果您运气不好,您截断了< code>long中的一些数字,并且您需要找到并修复一个棘手的错误。

Java的设计目标是简化事情和防止程序员错误。该规范规定不能进行自动转换,将<code>long。相反,规范要求发生编译器错误。

如果您特别确定<code>long。在您的例子中,它可能看起来像<code>字符串month=months[(int)a2-1]

 类似资料: