程序找到NIC详细信息

时间:2013-08-05 05:31:09

标签: java

我将这个程序用于我的目的。     import java.util.Scanner;

class NIC_Details {

String id;
int month[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

NIC_Details() {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter Your NIC Number \nLike : 000000000V");
    id = input.next();
}

int getYear() {
    return (1900 + Integer.parseInt(id.substring(0, 2)));
}

int getDays() {
    int d = Integer.parseInt(id.substring(2, 5));
    if (d > 500) {
        return (d - 500);
    } else {
        return d;
    }
}

public void setMonth() {
    int mo = 0, da = 0;
    int days = getDays();

    for (int i = 0; i < month.length; i++) {
        if (days < month[i]) {
            mo = i + 1;
            da = days;
            break;
        } else {
            days = days - month[i];
        }
    }
    System.out.println("Month : " + mo + "\nDate : " + da);

}

public String getSex() {
    String M = "Male", F = "Female";
    int d = Integer.parseInt(id.substring(2, 5));
    if (d > 500) {
        return F;
    } else {
        return M;
    }
}

public static void main(String[] args) {
    NIC_Details N = new NIC_Details();
    System.out.println("Your Details of Date of Birth from NIC Number");
    System.out.println("Year : " + N.getYear());
    N.setMonth();
    System.out.println("Sex : " + N.getSex());
}
}

但是当我输入像这样的93031 * ** 的网卡号码时 它给出了这个细节

Enter Your NIC Number 
Like : 000000000V
93031******
Your Details of Date of Birth from NIC Number
Year : 1993
Month : 2
Date : 0
Sex : Male

请告诉我这里发生了什么。

1 个答案:

答案 0 :(得分:1)

您的代码没问题,这是您的逻辑问题。

您的输入是31天。在setMonth()时,您的days < month[i]方法会询问month[0]==31
答案是否定的,然后你days = days - month[i]; days = 0month = 2

您可能希望将if语句更改为:

if (days <= month[i]) {

但这取决于天气31天意味着31天过去了,然后你的代码就好了