日期方法仅在月份为2时有效?

时间:2016-08-03 04:04:53

标签: java date netbeans

例如,如果我输入26/2/1996,它会起作用,但如果我输入26/3/1996,我什么也得不到。它会显示任何日期,只要M = 2,我不明白为什么。我尝试使用Integer.toString(int),我得到了相同的结果,这是我的代码。

import java.util.Scanner;
public class DEPURANDO {
    static Scanner input = new Scanner(System.in); 

    static String DMY () {
        String F = "";
        boolean salida;
        int D, M, Y;

        do {
            salida = true;
            System.out.println("");

            System.out.println("DAY: ");
            D=input.nextInt();
            input.nextLine();

            System.out.println("MONTH: ");
            M=input.nextInt();
            input.nextLine();

            System.out.println("YEAR: ");
            Y=input.nextInt();
            input.nextLine();

            if ( (Y <= 0) || (M <= 0) || (D <= 0) || (M > 12) || (D > 31) ) {
                System.out.println("Error");
                salida = false;
            }
            else {
                if (M == 2 && D > 29) {
                    System.out.println("Error");
                    salida = false;
                }
                else if (M != 2) {
                    if ( ((M % 2) == 0) && (D > 30) && (M < 8) ) {
                        System.out.println("Error");
                        salida = false;
                    }
                    if ( ((M % 2) != 0) && (D > 30) && (M >= 8) ) {
                        System.out.println("Error");
                        salida = false;
                    }
                }
                else {
                    F = String.valueOf(D);
                    F += "/";
                    F += String.valueOf(M);
                    F += "/";
                    F += String.valueOf(Y);
                }
            }
        } while (salida != true);

        System.out.println("Look at the date "+F);
        return F;
    }

    static char A = 'A';
    public static void main(String[] args) {
        do {
            DMY();
        } while(A != 'B');
    }

}

1 个答案:

答案 0 :(得分:0)

如果IPM.Note不是Namespace.GetItemFromID,则以下if-elseif-else语句会使您错误或没有任何反应。

M

2中的代码应位于if (M == 2 && D > 29) { // ... } else if (M != 2) { // here's the culprit // ... } else { // ... } 部分,您应该同时删除else if (M != 2)语句。类似于以下内容:

else

另外请注意,最好使用else if (M != 2)而不是将所有字符串附加到if (M == 2 && D > 29) { System.out.println("Error"); salida = false; } else { if ( ((M % 2) == 0) && (D > 30) && (M < 8) ) { System.out.println("Error"); salida = false; } if ( ((M % 2) != 0) && (D > 30) && (M >= 8) ) { System.out.println("Error"); salida = false; } if (salida) { F = String.valueOf(D); F += "/"; F += String.valueOf(M); F += "/"; F += String.valueOf(Y); } } 。例如:

String.format(...)