2012-02-21 20 views
4

こんにちは私のプログラムが正しく動作するのに問題があります。私は構文エラーをクリアすることができましたが、今は私の出力を発行しています。whileループのネストされたif/elseステートメント

まず、最初のIF文の中で、自分の名前と部門を入力するように促すので、出力すると名前は空白になり、部門だけが入力します。 "String name"をinput.nextに変更すると正しくプロンプトが表示されますが、deptとtotalHrsWkdは一緒にマージされるため、IF文全体では何かだと思っています。

私のプログラムをテストしているとき、totalHrsWkdの負の数を入力するとクラッシュします。 2つのprint文がすべて1行に表示され、JCreatorがクラッシュします。

この問題についてお手伝いいただきありがとうございます。ありがとうございます。

public static void main(String[] args) 
    { 
    // TODO code application logic here 

    int attempt = 1, employeeID = 0; 
    double hoursWorked = 0.0; 
    double overtimeHrs = 0.0; 
    double totalHrsWkd = 0.0; 

    Scanner input = new Scanner(System.in); 

    while(attempt < 4) 
    { 
     System.out.println("Enter your employee ID: "); 
     employeeID = input.nextInt(); 

     if(employeeID == 12345678) 
     { 
     System.out.printf("Enter your name: "); 
     String name = input.nextLine(); 

    System.out.printf("Enter your department: "); 
     String dept = input.nextLine(); 

    System.out.printf("Enter your hours worked including overtime: "); 
     totalHrsWkd = input.nextDouble(); 

     while(totalHrsWkd < 0) 
      { 
      System.out.printf("Try again! Hours worked cannot be negative."); 

      System.out.printf("Enter your hours worked including overtime: "); 
      } 

      overtimeHrs = totalHrsWkd - 40; 
      hoursWorked = totalHrsWkd - overtimeHrs; 

      if(overtimeHrs <= 0) 
      { 
      } 
      else if(overtimeHrs == 0) 
      { 
      } 
      else if(hoursWorked == totalHrsWkd) 
      { 
      } 
      else if(hoursWorked == 40) 
      { 
      } 
     System.out.printf("Name: %s\n" + "Dept: %s\n" + 
        "Hours Worked: %.2f\n" + "Overtime Hours: %.2f\n" 
        + "Total Hours Worked: %.2f\n", name, dept, 
        hoursWorked, overtimeHrs, totalHrsWkd); 

     attempt = 3; 
     } 
    else 
    { 
     if(attempt < 3) 
     { 
     System.out.println("Invalid ID! Try again." ); 
     } 
     else 
     { 
     System.out.println("Invalid ID! 0 attempts left. Exiting program!"); 
     } 

     } 

    ++attempt; 
    } 
    System.exit(0); 
} 
} 
+0

'totalHrsWkd = input.nextDouble();'はwhileループの中に入れてください。さもなければ、 'totalHrsWkd'を変更することなく、無限ループで動いているだけです。 – biziclop

+0

なぜ' Scanner'を使うことにしましたか?これは、対話型プログラムにとっては決して適切ではありません。代わりに、['BufferedReader.readLine'](http://docs.oracle.com/javase/1.5.0/docs/api/java/io/BufferedReader.html)を使用してください。 –

+0

これは私のJava 1クラスのプログラミング課題です。本質的に、先生は擬似コードを私たちに提供し、プログラムをコーディングする必要がありました。これまでのところ、Scannerクラスのみを扱っています。私はまだ私たちの本でBufferedReader.readLineに出くわしたことはありません。 – Abweichung

答えて

3

問題が

employeeID = input.nextInt(); 

のみは、入力ストリームからの数字の次のシーケンスを読み取ることです。しかし、従業員IDを実際に入力するには、Enterキーも押してください。キー入力はまだあなたの次の呼び出し

String name = input.nextLine(); 

Scannerクラスが行くときに「ああ、ここに入力しますキーが押さだ、私は、ユーザーが空の名前を望んでいたと思います。」、入力を待っている入力してくださいあなたは名前を入力する機会も与えられていないので、あなたのプログラムが同時に2つの質問(名前と部門)を求めているようです。

Scannerクラスを引き続き使用する場合は、nextInt()などの方法を避けて、常にnextLine()を使用することをおすすめします。もちろん、ユーザが入力した数字を parseInt()などのようなものを使ってJava整数に変換する必要があります。

+0

それでは最初に文字列としてキャストする必要がありますか?そのような: 文字列ID = System.out.println( "あなたの従業員のIDを入力:"); int employeeID = Int。parseInt(ID); もしそうなら、私は互換性のないタイプのエラーを得るだけでなく、シンボル変数Intを見つけることができません。 – Abweichung

+0

'println()'の戻り値を 'String'に代入しようとしています。試してみてください。 'String employeeIDStr = input.nextLine(); int employeeID = Integer.parseInt(employeeIDStr); 'Int'の代わりに' Integer'クラスの使用にも注意してください。 –

+0

最後に!本当に初心者の問題であなたを気にして申し訳ありませんが、私は基本的に彼女がパワーポイントのスライド上で授業時間の講義を過ごすことを考えると、 プログラムを最初から作成する必要があるので、テンプレートとしての役割を果たすためにこれを最初にやりたいのです。 もう一度おねがいします! – Abweichung

2
attempt = 3; // Seems suspicious 

attempt++; // I think it's more appropriate in loops of this kind than ++attempt 
1

totalHrsWkdが0より小さい場合にプログラムが機能しない理由は、次のコードが無限ループを作成するためです。

while (totalHrsWkd < 0) 
      { 
      System.out.printf("Try again! Hours worked cannot be negative."); 

      System.out.printf("Enter your hours worked including overtime: "); 
      } 

このループ内で作業した時間数も確認する必要があります。

+0

今、上記の意味が分かりました。missingHrsWkd = input.nextDouble(); 私はそれを私の2番目のプロンプトの下に置く必要がありました。これは私の無限ループ問題を解決しましたが、まだ他の問題に取り組んでいます、ありがとう! – Abweichung

関連する問題