Java: ошибка вывода преобразования даты

1

Имея проблемы с этой программой, вы получите правильный результат. Я включил параметры, которые помогают расшифровать то, что является допустимым вводом даты (т.е. 3/22/2014), против недопустимого ввода (т.е. 3/57/2014). Они расположены внутри цикла for for в выражении if. Однако, когда я запускаю программу, я продолжаю получать вывод инструкции 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;
     }}}
  • 0
    Используйте String.equals вместо == для сравнения строковых значений.
  • 0
    Ошибки связаны с == а также с оператором break который завершает цикл после его первой итерации. Я отправил исправленный код в качестве ответа.
Теги:
arrays

1 ответ

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."); } }
  • 1
    Спасибо, Правин Винни. Это решение решает и некоторые другие мои проблемы с другими программами!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню