2016-09-25 3 views
-1

キーボードからユーザー入力を受け取り、年と呼ばれるプログラムを作成しようとしています。入力が4桁の年に等しい場合は、年を出力します。入力が2桁の場合は2000に加算して出力します。私はswitchステートメントを使用したが、それを正しくフォーマットする方法を混乱させたかった。私は自分自身のためにIf/elseのステートメントに行くことに決めました。どんな助けでも大歓迎です!ありがとうございました!入力フォームのキーボードを取り出し、フォーマットと一致するかどうかを確認します

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    final String FULL_YEAR = "[0-9]{4}"; 
    final String TWO_YEAR ="[0-9]{2}"; 
    System.out.println("Please enter a year"); 
    String Year = scan.next(); 

    if (Year.matches(FULL_YEAR)) 
    { 
     System.out.println("The year is " + Year); 
    } 
     else 
    { 
     System.out.println("Invalid Year"); 
    } 

    if (Year.matches(TWO_YEAR)) 
    { 
     System.out.println("The year is " + 2000+Year); 
    } 
} 

答えて

1

単純にelse ifを使用します。あなたはほとんどそこにいるように見えます。それを変更する:あなたはJavaの命名規則を使用している場合は余談として

if (Year.matches(FULL_YEAR)) 
    { 
     System.out.println("The year is " + Year); 
    } 
    else if (Year.matches(TWO_YEAR)) 
    { 
     System.out.println("The year is " + 2000 + Year); 
    } 
    else 
    { 
     System.out.println("Invalid Year"); 
    } 

、あなたのコードが読みやすくなります。特に、変数は大文字で始まらないようにしてください(つまり、Yearyearである必要があります)。スキャンが終わったらスキャナを閉じる必要があります(scan.close())。

+0


は助けをどうもありがとうございますけれども、あなたのリソースを閉じない場合は、なぜあなたは(scan.close()) –

+0

@EthanCollins使用しますガベージコレクタは決してクリーンアップすることはできませんが、あなたは使用しないことに注意してください。さらに詳しい情報が必要な場合は、メモリリークを検索できます。 – nhouser9

1

コードをお読みください。最初の条件がYY形式と一致する場合は、Invalid yearが有効であるかどうかを出力します。

がここのようなif-elseステートメントを使用します。両方がprintln()に文字列として表現されているので

if (Year.matches(FULL_YEAR)) { 
    System.out.println("The year is " + Year); 
} else if (Year.matches(TWO_YEAR)) { 
    System.out.println("The year is " + 20 + Year); 
} else { 
    System.out.println("Invalid Year"); 
} 

をところで、あなたは2016(20 + Year)代わり200016(2000 + Year)の年間例えばプリントアウトするだろう方法。オペレータ+は、数字を追加する代わりに文字列を連結します。 2000Yearはどちらも異なるデータ型です。

は、文字列を追加すると、整数のいずれかを使用します。

System.out.println("The year is " + (2000 + Integer.parseInt(Year))); 
System.out.println("The year is " + 20 + Year); 

もう一つ:あなたはscan.close();

0
と、もはやそれを必要としない時にリソースを閉じることを忘れないでください

switchステートメントは、式内のStringオブジェクトを、String.equalsメソッドを使用しているかのように各caseラベルに関連付けられた式と比較します。その結果、オブジェクトの比較では、switchステートメントで大文字と小文字が区別されます。 Javaコンパイラーは、オブジェクトを使用しているswitchステートメントから、より効率的なバイトコードを一般的に生成します。if-then-elseステートメントよりも効率的です。それは基本的にあなたがポインタを持っている意味し、メモリリークが発生する可能性があります Reference URL

関連する問題