0

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;
}

年に関する最初の部分とそれに関連付けられたメソッドを使用すると、入力が間違っている場合は正常にループします。

2番目の部分である「goUS」は、リモートで同じことを行い、文字がy/nであるかどうかをチェックします。チェックとすべてに関しては問題なく動作しますが、日付の正しい表示で[OK]をクリックすると、 goUS が再びループし、回答が前の表示から連結され始めます。日付を表示した後、アプリを終了させたい。

私の欠陥を指摘する助けがあれば大歓迎です。

4

3 に答える 3

1

さて、あなたvalidOptionは小文字をチェックしますが、大文字を渡します。

最も柔軟な解決策は、次のような期待値と比較する前にケースを正規化することです。

public static boolean validOption (char conversion) {
    conversion = Character.toLowerCase(conversion)
    return conversion == 'y' || conversion == 'n';
}
于 2013-07-25T12:23:42.653 に答える
0

validOption()正しく動作しません。ループの残りの作業はそれとは無関係ですが、終了は正しい戻り値に依存します。

そこでは小文字をチェックしますが、他の場所では大文字をチェックします。有効性チェックの直前に、チェックされた文字を大文字に変更します。文字も大文字に変更しvalidOption()ます。

于 2013-07-25T11:51:59.440 に答える
0

問題は入力文字の大文字と小文字が原因のようです。mainvalidOptionメソッドで小文字でチェックし、大文字でチェックしています。あなたの入力は大文字で、validOptionfalse を返すと思います。

変更validOption:

public static boolean validOption (char conversion) {
    return conversion == 'Y' || conversion == 'N';
}

java.lang.Character toLowerまたはtoUpperメソッドを使用することさえできます。

于 2013-07-25T12:17:49.933 に答える