do{
String third = JOptionPane.showInputDialog(null, "Please enter Year ["+day+"/"+month+"/YY?]");
year = Integer.parseInt (third);
validChoice = validYear(year);
}while(!validChoice);
do{
String goUS = JOptionPane.showInputDialog(null, "Do you want to switch the format to US? [Y/N]");
goUS = goUS.toUpperCase();
char conversion = goUS.charAt(0);
validChoice = validOption(conversion);
switch(conversion){
case 'Y':
if(year < 10)
{
date.append(month).append("/").append(day).append("/" + "200").append(year);
}else{
date.append(month).append("/").append(day).append("/" + "20").append(year);
}
JOptionPane.showMessageDialog(null, date);
break;
case 'N':
if(year < 10)
{
date.append(day).append("/").append(month).append("/" + "200").append(year);
}else{
date.append(day).append("/").append(month).append("/" + "20").append(year);
}
JOptionPane.showMessageDialog(null, date);
break;
default:
JOptionPane.showMessageDialog(null, "Invalid answer! Use Y/N", "Error", JOptionPane.ERROR_MESSAGE);
}}while(!validChoice);
//// METHODS:
public static boolean validYear (int year){
boolean isValid = true;
if(year < 1 || year > 99)
{
isValid = false;
}
return isValid;
}
public static boolean validOption (char conversion){
boolean isValid = true;
if(conversion != 'y' || conversion != 'n')
{
isValid = false;
}
return isValid;
}
第一部分,关于年份,以及它的相关方法,如果输入错误,它会循环好。
第二部分,'goUS',方法远程相同,检查字符是否为y / n - 它在检查和所有方面都正常工作,但在用正确的日期显示确定后,它再次启动goUS循环,答案开始从前一个显示连接起来,依此类推。我希望应用程序在显示日期后结束。
任何指出我的缺陷的帮助都将不胜感激。
答案 0 :(得分:1)
好吧,你的validOption
检查小写字符,但是你传递大写字符。
最灵活的解决方案是在比较预期值(例如
)之前对案例进行规范化public static boolean validOption (char conversion) {
conversion = Character.toLowerCase(conversion)
return conversion == 'y' || conversion == 'n';
}
答案 1 :(得分:0)
您的validOption()
无效。循环的其余部分的工作与此无关,但终止取决于正确的返回值。
你在那里检查小写字符,但在其他地方检查大写字母。您在有效性检查之前将已检查的字符更改为大写。在validOption()
中也将字符更改为大写。
答案 2 :(得分:0)
似乎问题是由于输入字符的情况,您在validOption
中使用小写字符进行检查,并在main方法中使用大写字母进行检查。我相信你的输入是大写的,validOption
返回false。
将validOption
更改为:
public static boolean validOption (char conversion) {
return conversion == 'Y' || conversion == 'N';
}
甚至使用java.lang.Character
toLower
或toUpper
方法。