Имея проблемы с этой программой, вы получите правильный результат. Я включил параметры, которые помогают расшифровать то, что является допустимым вводом даты (т.е. 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;
}}}
Основная проблема была в вашем 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."); } }
==
а также с операторомbreak
который завершает цикл после его первой итерации. Я отправил исправленный код в качестве ответа.