2016-09-10 3 views
-2

Date値をユーザーから文字列として取得した後、String to Dateを解析する際に例外がスローされます。 日付の値を格納するために実行する必要があるものは、日付を取得するための特定のメソッドがあります。コンストラクタを使用して日付値を取得し、日付型の変数に格納する

Medicine.java

package Medicine; 
import java.util.Date; 

public abstract class Medicine { 

public int price; 
    Date expiryDate; 

    Medicine() { 
    } 

    Medicine(int price, Date expiryDate) { 
    this.price=price; 
    this.expiryDate=expiryDate; 
    } 

    public void getDetails() { 
    System.out.println("The price is "+this.price); 
    System.out.println("The expiry Date for the product is "+this.expiryDate); 
    } 

    abstract void displayLabel(); 

} 

Tablet.java

package Medicine; 
import java.util.Date; 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 

public class Tablet extends Medicine{ 

Date expDate; 
void displayLabel() { 
    System.out.println("Store in a cool and dry place"); 
} 

Tablet() { 
} 

Tablet(int price, Date expDate) { 
    this.price=price; 
    this.expDate=expDate; 
} 
} 

実行クラス

int price; 

Date expDate=new Date();; 

Scanner reader = new Scanner(System.in); 

Medicine[] medicineArray =new Medicine[5]; 

DateFormat df=new SimpleDateFormat("dd-mm-yyyy"); 

System.out.println("Enter Tablet's price"); 

price = reader.nextInt(); 

System.out.println("Enter Tablet's expiry date in yyyy-dd-mm format"); 

String stringExpDate=reader.nextLine(); 


try { 
      expDate=df.parse(stringExpDate); 

     } 
     catch(Exception e){ 
      System.out.println("Date format not parsed"); 
     } 
     Medicine med1=new Tablet(price,expDate); 
     med1.getDetails(); 
     med1.displayLabel(); 

出力:

が解析されていない

日付形式YYYY-DD-MMの形式でタブレットの有効期限を入力し、タブレットの価格を入力

価格は23

満了日であります製品のヌルです

+0

あなたも独自のコードを理解していますか? – Jay

+0

はい@Jay。 YYYY-DD-MMの形式でタブレットの有効期限を入力し 日付形式 解析されていないタブレットの価格を入力します あなたはすでに私が手 –

答えて

-1

あなたは、タブレットと医学の両方のクラスでいくつか問題がありました。

こちらから試してみてください。

abstract public class Medicine 
{ 
    public int price; 
    public Date expiryDate; 

    Medicine(int price, Date expiryDate) 
    { 
     this.price=price; 
     this.expiryDate=expiryDate; 
    } 

    public void getDetails() { 
     System.out.println("The price is "+this.price); 
     System.out.println("The expiry Date for the product is "+this.expiryDate); 
    } 

    abstract void displayLabel(); 
} 

、ここ

public class Tablet extends Medicine { 

    Date expDate; 

    void displayLabel() { 
     System.out.println("Store in a cool and dry place"); 
    } 

    public Tablet(int price, Date expDate) 
    { 
     super(price, expDate); 
    } 

} 

次の部分は簡単にする必要があります!

-1

はこのお試しください:

public class Tablet extends Medicine{ 

//Date expDate; 
void displayLabel() { 
    System.out.println("Store in a cool and dry place"); 
} 

Tablet() { 
} 

Tablet(int price, Date expDate) { 
    this.price=price; 
    this.expiryDate=expDate; 
} 

} 

int price; 
     Date expDate=new Date(); 
     Scanner reader = new Scanner(System.in); 
     Medicine[] medicineArray =new Medicine[5]; 
     DateFormat df=new SimpleDateFormat("yyyy-dd-mm"); 
     System.out.println("Enter Tablet's price"); 
     price = reader.nextInt(); 
     System.out.println("Enter Tablet's expiry date in yyyy-dd-mm format"); 
     String stringExpDate=reader.next(); 
     try { 
      expDate=df.parse(stringExpDate); 
      } 
     catch(Exception e) 
     { 
     System.out.println("Date format not parsed"); 
     } 
    Medicine med1=new Tablet(price,expDate); 
    med1.getDetails(); 
    med1.displayLabel(); 
1

をあなたの例では述べています

はYYYY-DD-MMの形式

にタブレットの有効期限を入力します。しかし、あなたのフォーマットがnew SimpleDateFormat("dd-mm-yyyy");です。

まず、どちらが実際に必要な形式であるかを決定し、mm(分)をMM(月)に変更します。

またMedicineが既にTabletによって継承されexpiryDateを持っているので、TabletクラスでDate expDate;を再定義する必要はありません。

+0

出力され与えられているかを理解することができれば、コードを改善するために私を助け 価格は23 です。製品の有効期限は空です。 –

0

TL; DR

LocalDate.parse("2016-01-23") 

のjava。時間

答えはカヤマンが正しい。あなたの書式設定コードが間違っていました。マニュアルをよく読んでください。

また、あなたは今java.timeクラスに取って代わら古い面倒なレガシー日付クラスを使用しています。これには、時間帯とタイムゾーンのない日付のみの値のLocalDateが含まれます。

入力文字列の形式は、ISO 8601標準に準拠しています。したがって、書式設定パターンを指定する必要はありません。

LocalDate ld = LocalDate.parse("2016-01-23"); 
関連する問題