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

しかし、この 93031* のような NIC 番号を入力する、 この詳細が表示されます

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 日です。メソッドは if 、 when を尋ねsetMonth()ます 。答えはノーです。days < month[i]month[0]==31
days = days - month[i];days = 0month = 2

if ステートメントを次のように変更することをお勧めします。

if (days <= month[i]) {

しかし、それは天候にもよりますが、31日は31日が経過したことを意味し、コードはそのままで良いです

于 2013-08-05T05:43:37.553 に答える