3

我将这个程序用于我的目的。导入 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());
}
}

但是当我输入像这样的 NIC 号码 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

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

4

1 回答 1

1

你的代码没问题,是你的逻辑有问题。

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

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

if (days <= month[i]) {

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

于 2013-08-05T05:43:37.553 回答