初学者:做while循环问题

时间:2013-07-25 11:31:50

标签: java do-while

Ello,有一个小问题,我不知道出了什么问题......代码片段:

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循环,答案开始从前一个显示连接起来,依此类推。我希望应用程序在显示日期后结束。

任何指出我的缺陷的帮助都将不胜感激。

3 个答案:

答案 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 toLowertoUpper方法。