0

Java クラス用に記述しようとしている単純なコードに 2 つの問題があります。これがほとんどの人にとって簡単に思える場合は申し訳ありませんが、私は Java を始めたばかりです。私が抱えている最初の問題は、ループが適切に継続しないことです。1回だけ問題なく実行され、最初に「quit」と入力すると終了しますが、1回実行すると、emp nameに別の値を入力できなくなります。ループの最後の行 enter emp name から最初の行までまっすぐ進み、時給を入力します。新しい名前を入力したり終了したりする機会はありません。

私の 2 番目の問題は、if ステートメントが、時給と労働時間に入力された値が 0 より大きいことを確認しようとしているということです。0 を入力するとエラー メッセージが表示されますが、負の数を入力すると、プログラムは何も問題はありません。入力された値が正の double のみであり、負の double または 0 を受け入れないことを確認するにはどうすればよいですか?

// Program to Calculate Payroll
import java.util.Scanner;
import java.text.DecimalFormat;

class Payroll
{
   public static void main(String args[])
   {
   Scanner myScanner = new Scanner(System.in);
   String empName;
   double hourlyRate;
   double hoursWorked;
   double grossPay;
   double netPay;
   double taxes;
   DecimalFormat money = new DecimalFormat("$.00");
//Get User Information
   System.out.print( "Enter employee name or enter 'quit' when finished. " );
   empName = myScanner.nextLine();
   while (!empName.equals("quit"))
   {
     System.out.print( "What is their hourly rate? $");
     hourlyRate = myScanner.nextDouble();
     if (hourlyRate <= 0)
     {
         System.out.println( "Value is not valid, please enter an amount above zero.");
         System.out.print( "What is their hourly rate? $");
         hourlyRate = myScanner.nextDouble();
     }
     System.out.print( "How many hours did they work? ");
     hoursWorked = myScanner.nextDouble();
     if (hoursWorked <= 0)
     {
         System.out.println( "Value is not valid, please enter an amount above zero.");
         System.out.print( "How many hours did they work? ");
         hoursWorked = myScanner.nextDouble();
     }
//Calculate Pay and Taxes
     grossPay = hourlyRate * hoursWorked;
     taxes = .13 * grossPay;
     netPay = grossPay - taxes;
//Display All Information
     System.out.print( "Employee name: ");
     System.out.println(empName);
     System.out.print( "Hourly Rate: ");
     System.out.println(money.format(hourlyRate));
     System.out.print( "Hours Worked: ");
     System.out.println(hoursWorked);
     System.out.print( "Gross Pay = ");
     System.out.println(money.format(grossPay));
     System.out.print( "Federal Taxes = ");
     System.out.println(money.format(taxes));
     System.out.print( "Net Pay = ");
     System.out.println(money.format(netPay));
     System.out.print( "Enter employee name or enter 'quit' when finished. " );
     empName = myScanner.nextLine();
   }
   System.out.println( "Thank you for using this payroll program.");
   }
}
4

3 に答える 3

2

while最初の問題に対応して、ループ内で従業員の名前を再確認していません。ループの外側を初期化する必要empNameがありますが、ループするたびにもう一度尋ねてください。

String empName = "";
while (!empName.equals("quit")) {
  //Get User Information  
  System.out.print( "Enter employee name or enter 'quit' when finished. " );
  empName = myScanner.nextLine();

  if (empName.equals("quit")) {
    break;
  }

2 番目の問題については、再度ループを使用して、が より大きいwhileことを確認できます。チェックのためにループバックするたびに、必ず再プロンプトを出してください。hourlyRate0

hourlyRate = -1;
while (hourlyRate <= 0) {
  System.out.print( "What is their hourly rate? $");
  hourlyRate = myScanner.nextDouble();
  if (hourlyRate <= 0) {
    System.out.println( "Value is not valid, please enter an amount above zero.");
  }
}
于 2013-01-27T18:34:51.437 に答える
0

従業員名に別の値を入力することはできません。

回線に問題があるから

 hoursWorked = myScanner.nextDouble();

これはdouble値のみを取り、値は取りません\n。したがって、最後に、プログラムが次の行に移動するとき

 empName = myScanner.nextLine();

empNameの を引き続き取得し、\nキーボードからの入力をスキップします。 empName 値への入力を要求する前に、別の myScanner.nextLine() を配置する必要があります。

 myScanner.nextLine();
 System.out.println("....");
 empName = myScanner.nextLine();

検証のために、他の提案と同じようにしてください

于 2013-01-27T18:47:44.957 に答える
0

従業員名に別の値を入力することはできません。

従業員名はループ内にないため、一度だけ要求します。ループ内で名前を尋ねるコードを移動します。コードをループの最後に追加するのが最も簡単な場合もありますが、私は最初にブレークを付けてチェックすることを好みます。

入力された値が正の double のみであり、負の double または 0 を受け入れないことを確認するにはどうすればよいですか?

ユーザーに番号を修正するように求めるのは 1 回だけです。while ループを使用すると、レートが OK になるまで尋ね続けます。

于 2013-01-27T18:35:43.417 に答える