2016-08-03 44 views
-1

例如,如果我輸入26/2/1996,它可以工作,但如果我輸入26/3/1996,則什麼都不會。它會顯示任何日期,只要M = 2,我不明白爲什麼。我嘗試使用Integer.toString(int),我得到了相同的結果,這是我的代碼。日期方法僅在月份爲2時有效?

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

} 
+0

調試您的代碼首先將這些結果添加到您的問題。 –

+1

正確格式化您的代碼並檢查您的if else語句是否正確對齊。如果月份不是'2',則不會輸入最後一個'else'。 – Codebender

回答

0

以下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(...),而不是追加所有這些字符串F。例如:

if (salida) { 
    F = String.format("%d/%d/%d", D, M, Y); 
} 
+0

非常感謝你,我通過Codebender的評論發現了它,我只是從C++複製並粘貼了該方法,並替換了非java的東西,並且它工作正常。 – Morecaul

相關問題