Java:日期转换输出错误

时间:2014-04-24 00:07:45

标签: java arrays

在此程序上遇到问题,输出正确无误。我已经包含了有助于破译有效日期输入(即3/22/2014)与无效输入(即3/57/2014)的参数。它们位于if语句中的for循环中。但是,当我运行程序时,我一直收到else语句的输出,我不知道为什么。我已经从String和int切换了数组类型而没有运气。你看到我的错误吗?感谢

  import java.util.Scanner;
  import javax.swing.*;
public class ConvertDate
    {
    public static void main(String[] args)
    {
     String enteredDate, month, day, year;
     final String[] monthID = {"January", "February", "March", "April", "May", "June", "July",      
        "August", "September", "October", "November", "December"};

     final int[] monthIDArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
     final String[] monthValidSingleInputs = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10",  
        "11", "12"};
     final String[] monthValidDosInputs = {"01", "02", "03", "04", "05", "06", "07", "08", "09", 
        "10", "11", "12"};
     final String[] monthsDays = {"31", "28", "31", "30", "31", "30", "31", "31", "30", "31", 
        "30", "31"};
     final int[] intDaysArray = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

     final int JANUARY = 1;
     final int DECEMBER = 12;
     int selectedDate;
     int x;

     enteredDate = JOptionPane.showInputDialog(null, "Enter a date in the format MM/DD/YYYY");

使用indexOf来区分/

中的输入
     int slashIndex = enteredDate.indexOf("/");
  //Finding the month
        month = enteredDate.substring(0, slashIndex);
           int intMonth = Integer.parseInt(month);
        enteredDate = enteredDate.substring(slashIndex + 1);
        enteredDate = enteredDate.trim();
  //Finding the day
        slashIndex = enteredDate.indexOf("/");
        day = enteredDate.substring(0, slashIndex);
           int intDay = Integer.parseInt(day);
        enteredDate = enteredDate.trim();
        enteredDate = enteredDate.substring(slashIndex + 1);
  //Finding the year
        year = enteredDate.substring(0, 4);
           int intYear = Integer.parseInt(year);
        enteredDate = enteredDate.trim();

输出陈述

  for(x = 0; x < monthID.length; ++x)
{
if(((month == monthValidSingleInputs[x]) || (month == monthValidDosInputs[x])) && (intDay <= 
       intDaysArray[x]) && ((intMonth >= JANUARY) && (intMonth <= DECEMBER)))
           JOptionPane.showMessageDialog(null, "Date is: " + monthID[x] 
           + " " + intDay + ", " + year);
           else
              JOptionPane.showMessageDialog(null, "Please re-run program, entries not valid.");
              break;
     }}}

1 个答案:

答案 0 :(得分:1)

主要问题在于您的for loop。由于您在break内使用了for loop语句,因此在第一次迭代后它已被终止。

您的代码的另一个问题是,您使用==来比较字符串。您无法使用==运算符比较两个字符串。您应该使用方法equals()equalsIgnoreCase()来比较两个字符串。

您必须更改指示为 '输出语句' 的块才能获得正确的输出。修改后的代码如下所示:

    boolean flag=false;

for(x = 0; x < monthID.length; ++x) { if(((month.equals(monthValidSingleInputs[x])) || (month.equals(monthValidDosInputs[x]))) && (intDay <= intDaysArray[x]) && ((intMonth >= JANUARY) && (intMonth <= DECEMBER))) { JOptionPane.showMessageDialog(null, "Date is: " + monthID[x] + " " + intDay + ", " + year); flag=true; break; } } if(flag==false) JOptionPane.showMessageDialog(null, "Please re-run program, entries not valid."); } }