2017-06-22 14 views
-3

プログラミングの初心者の合計: 日付を(mm/dd/yyyy)形式で入力する必要があります。 StringをparseInt()して、有効か無効な日付かを検証する必要があります。
助けてください。
javaを使用してプログラムする。日付(mm/dd/yyyy)を入力し、入力したデータを検証するユーザー

import java.util.Scanner; 

public class ct0280642Assignment 
{ 
    public static void main(String [] dateValidation) 
    { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Please enter a date (mm/dd/yyyy)"); 
     String uDate = kb.nextLine(); 
     int userDate = Integer.parseInt(uDate); 
     int length = uDate.length(); 

     if(length != 10) 
     { 
      System.out.println(uDate+" is a not valid Date"); 
     } 
     else 
     { 
      System.out.println(uDate+" is a valid Date"); 
     } 
    }  

} 
+1

日付検証または長さの検証のみですか? –

+3

"parseInt()が必要です" - なぜですか?なぜ組み込みの日付解析機能を使用しないのですか?これは、割り当ては具体的には*パースに関するものなのですか?もしそうなら、あなたは次のことをする必要があります:1)入力をコンポーネントに分割する。 2)各部分を整数として解析する。 3)構成要素が合理的であることを検証する(例えば、2月30日ではない)。それがどの部分で問題を引き起こしているのかを特定してください。(現時点では、全体を1つの整数として解析しようとしているように見えます...) –

+0

初心者にも検索エンジンがありますか? ;-)あなたの使用を訓練してください、あなたは尋ねる必要はないかもしれません。 –

答えて

1
import java.util.Scanner; 

public class ct0280642Assignment { 
    public static void main(String[] dateValidation) { 
     Scanner kb = new Scanner(System.in); 
     System.out.println("Please enter a date (mm/dd/yyyy)"); 
     String uDate = kb.nextLine(); 
     int userDate = Integer.parseInt(uDate); 
     int length = uDate.length(); 

     try { 
      DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
      df.setLenient(false); 
      df.parse(uDate); 
      System.out.println(uDate + " is a not valid Date"); 

     } catch (ParseException e) { 
      System.out.println(uDate + " is a valid Date"); 
     } 
    } 

} 

コードの上お試しください。

ここで私はDateFormat機能を使用してdf.parse(uDate) .IF日付を使用して、その文字列を解析しようとしていたことが自動的にDATEにその文字列を転送する有効です。

この文字列に問題が自動的に発生し、例外が生成され、ParseExceptionで処理され、書き込みメッセージの日付が無効な場合。

希望すると、これが役立ちます。

1

次のコードを試してください。 SimpleDateFormatは指定された日付を解析し、入力が有効でない場合は例外をスローします。

public static void main(String [] dateValidation) 
    { 
     Scanner kb = new Scanner(System.in); 
     SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); 
     sdf.setLenient(false); 
     System.out.println("Please enter a date (mm/dd/yyyy)"); 
     String uDate = kb.nextLine(); 
     try{ 
      sdf.parse(uDate); 
      System.out.println(uDate+" is a valid Date"); 
     } 
     catch(Exception e) 
     { 
      System.out.println(uDate+" is not a valid Date"); 
     } 
     kb.close(); 
    } 

ここでSimpleDateFormatのドキュメントのリンクを探します。

https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

+2

若い人に古くなった古いSimpleDateFormatクラスを使用するよう教えてください。 'DateTimeFormatter'がはるかに優れています。 –

+0

@ OleV.V。 DateTimeFormatterは使用できますが、Java 8でしか使用できません。したがって、若い人がJava 7またはそれ以下のバージョンを使用する場合、苦労せずに学習できるようにします。 –

+2

まず、若い人はJava 8(またはそれ以降)を使用して、可能な限り未来に近づけるべきです。第2に、現代のクラスはJava 6と7で[the ThreeTen Backport](http://www.threeten.org/threetenbp/)から入手できます。 –

1

ユーザー入力を検証するための一般的な方法は、それを解析しようとそれが成功した場合に見ています。それもここでもうまくいきます。 Javaは、さまざまな固定フォーマットの日付を解析するための素晴らしい内蔵の施設を持っているので、私はあなたがこれらを使用することをお勧め:

private static final DateTimeFormatter PARSE_FORMATTER 
     = DateTimeFormatter.ofPattern("MM/dd/uuuu"); 

public static void main(String [] dateValidation) 
{ 
    try (Scanner kb = new Scanner(System.in)) { 
     System.out.println("Please enter a date (mm/dd/yyyy)"); 
     String uDate = kb.nextLine(); 
     try { 
      LocalDate.parse(uDate, PARSE_FORMATTER); 
      System.out.println(uDate + " is a valid Date"); 
     } catch (DateTimeParseException dtpe) { 
      System.out.println(uDate + " is a not valid Date"); 
     } 
    } 
} 

これは06/17/2017を受け入れますが、月が2桁の数字を持っていないため6/17/2017を拒否します。書式パターン文字列MM/dd/uuuuは大文字と小文字が区別されます(大文字のMと小文字のduである必要があります)。

あなたは1桁の月と日が、受け入れられている今、

private static final DateTimeFormatter PARSE_FORMATTER 
     = DateTimeFormatter.ofPattern("M/d/uuuu"); 

7/2/201707/02/201712/25/2017のすべてにフォーマッタを変更できるようにしたい場合。

あなたの質問には関係ありませんが、使用後にScannerが閉じていることを確認するために試してみました。これはまた、標準入力を閉じます。

質問:これはJava 8のみで動作しますか?いいえ、私が使用している現代の日時APIは、ThreeTen Backport、特にThreeTenABPでJava 6と7にバックポートされています(そして、今年の夏とそれ以降のバージョンでJava 9でも動作します)。

関連する問題